如何解决在Azure AD安全的Web Api中访问角色声明
我们有一个针对Azure Active Directory进行保护的AspNet Core网站和相关的Web API。经理登录网站以管理在分支机构工作的人员。
我们目前使用在应用程序注册清单中定义的“应用程序角色”来定义经理管理的分支机构。
在AspNet网站中,这些角色在ClaimTypes.Role
下的ClaimsPrincipal.Claims集合中返回,即“ http://schemas.microsoft.com/ws/2008/06/identity/claims/role”。
但是,如果我们实现了从同一AspNet网站调用的AspNet Web api,则该声明在该api中不可用。例如
GET https://ourdomain.com/api/v1/managers/-/staff
在AspNet网络api中,我可以通过HttpContext检查声明,但是Roles声明类型不存在。
如何在api中获得“角色”声明?我想了解角色声明的各个值,因为它具有各个分支的ID。
WebApi具有使用Microsoft.Identity.Web定义的Auth
public void ConfigureServices(IServiceCollection services)
{
services.AddMicrosoftIdentityWebApiAuthentication(Configuration);
services.AddControllers();
}
解决方法
您可以利用角色和组来控制对应用程序的访问。您可以定义一些应用程序角色,并将角色分配给组。然后,该组中的用户将具有以下声明:
{
"roles": ["{custom_role}"]
}
要查看详细信息,请参阅:
How to: Add app roles in your application and receive them in the token
Using groups vs using application roles for authorization in Azure AD apps
正如@juunas所说,您应该在API使用的应用程序注册(不是客户端应用程序)中定义应用程序角色。
有关如何配置客户端应用程序和API应用程序,您可以从另一个answer中找到示例和详细步骤。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。