访问 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 应用程序,您可以从另一个 .
中找到示例和详细步骤
我们有一个针对 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 应用程序,您可以从另一个