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

Accessing Roles claim in Azure AD secured Web Api

我们有一个针对 Azure Active Directory 的 AspNet Core 网站和相关网站 api。经理登录网站管理分行员工

我们目前使用应用程序注册清单中定义的“应用程序角色”来定义经理管理的分支。

在 AspNet 网站中,这些角色在 ClaimTypes.Role 下的 ClaimsPrincipal.Claims 集合中返回,“http://schemas.microsoft.com/ws/2008/06/identity/claims/role”。

但是,如果我们实现从同一 AspNet 网站调用的 AspNet 网站 api,则声明在 api 中不可用。例如

GET https://ourdomain.com/api/v1/managers/-/staff

在 AspNet 网络中 api 我可以通过 HttpContext 检查声明,但角色声明类型不存在。

如何在 api 中获得 Roles 声明?我想获取 Role 声明的各个值,因为它具有各个分支的 ID。

WebApi 有其 Auth 定义的用户 Microsoft.Identity.Web

 public void ConfigureServices(IServiceCollection services)
 {
        services.AddMicrosoftIdentityWebApiAuthentication(Configuration);
        services.AddControllers();
 }

您可以利用角色和组来控制对您的应用程序的访问。您可以定义一些应用程序角色并将角色分配给组。那么群里的用户就会有如下的claim:

{
  "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 应用程序,您可以从另一个 .

中找到示例和详细步骤