3

我有需要 Azure AD 不记名身份验证的 API。

public void ConfigureAuth(IAppBuilder app)
{
   app.UseWindowsAzureActiveDirectoryBearerAuthentication(
      new WindowsAzureActiveDirectoryBearerAuthenticationOptions
      {
         // ...
      });
}

那么是否可以查询 Azure AD(可能使用 Graph API)来确定调用用户的组信息?此处的最终目标是将基于角色的安全性应用于 API 方法/控制器,如下所示(或类似)。

[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]

此外,身份信息如何以及在何处应用于执行线程?

4

1 回答 1

6

最近,您可以使用角色声明和/或组声明来执行此操作。如果您有一个受不记名身份验证保护的 Web API(如此处的示例),您可以配置 API,以便访问令牌包含组和/或角色声明。

OWIN 中间件将读取 JWT 不记名令牌中的ClaimsIdentity声明,并在System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler( source ) 中填充适当的声明。

要配置您的 API 以接收组声明,您需要编辑"groupMembershipClaims"应用程序清单的属性,值为"All"或(分别包含或排除分发列表),如本示例"SecurityGroups"所示,该示例使用组声明将基于角色的安全性应用于使用标签的网络应用程序。[Authorize]

要配置您的 API 以接收角色声明,您还需要编辑清单,在"appRoles"属性中定义应用程序角色,如本示例所示(链接尚未激活 - 它将在接下来的几天内),它使用角色声明来做相同。定义应用程序角色后,您可以在 Azure 门户中或通过 GraphAPI 将用户和组分配给这些角色。请注意,由于 AAD 发出的声明属于 type "roles",因此您需要将 RoleClaimType 设置为:

new WindowsAzureActiveDirectoryBearerAuthenticationOptions  
{  
   ...
   TokenValidationParameters = new TokenValidationParameters {  
       RoleClaimType = "roles",  
   },  
   ...  
}
于 2014-11-14T22:06:49.967 回答