在Azure AD安全的Web Api中访问角色声明

时间:2020-10-26 10:31:46

标签: azure azure-active-directory msal

我们有一个针对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();
 }

1 个答案:

答案 0 :(得分:0)

您可以利用角色和组来控制对应用程序的访问。您可以定义一些应用程序角色,并将角色分配给组。然后,该组中的用户将具有以下声明:

{
  "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中找到示例和详细步骤。