【问题标题】:AzureAD rolebased authorizationAzure AD 基于角色的授权
【发布时间】:2020-05-09 01:10:08
【问题描述】:

我在 AzureAdd AppRegistrations 中注册了我的应用,并在 manifest 中为我的应用添加了 AppRoles,即管理员角色。在 Azure 企业应用程序菜单中,我添加了一个用户,并为其分配了管理员角色,我可以选择该角色。

在我的应用程序的 Startup 类中,我添加了 AddAuthorization 部分并定义了一个策略 RequireRole("Admin")

我将[Authorize(Roles = "Admin")] 用于我的控制器类,并在导航栏局部视图中添加了((await AuthorizationService.AuthorizeAsync(User, "Admin")).Succeeded)

但是,当我调试时,我找不到 {http://schemas.microsoft.com/ws/2008/06/identity/claims/role: Admin} 条目,并且 User.IsInRole("Admin") 返回 false。但是,用户凭据是正确的。 据我所知,我已经完成了所有步骤。我唯一能想到的是,我的 azure 订阅不允许添加组,但我看不出这如何与我设置的任何东西相关联。我不使用组,只使用个人用户。 我在这里想念什么?为什么我看不到用户角色?

清单:

    {
        "allowedMemberTypes": [
            "User"
        ],
        "description": "Admin's have access to everything.",
        "displayName": "Admin",
        "id": "d1c2ade8-98f8-45fd-ba4b-6d06b947c66f",
        "isEnabled": true,
        "lang": null,
        "origin": "Application",
        "value": "Admin"
    },
"groupMembershipClaims": "SecurityGroup",

Startup.cs

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options => Configuration.Bind("AzureAd", options));

    services.AddAuthorization(options =>
    {
       options.AddPolicy("Admin", policy => policy.RequireRole("Admin"));
       options.AddPolicy("Packager", policy => policy.RequireRole("Packager"));
    });

查看:

@if ((await AuthorizationService.AuthorizeAsync(User, "Admin")).Succeeded)
{
    <li><a asp-area="" asp-controller="Home" asp-action="Admin">Admin</a></li>
}

编辑(5 月 8 日): 使用来自微软的this doc,我让它工作了。添加到我的Startup.cs:

  services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
  {
    options.Authority = options.Authority + "/v2.0/";         // Microsoft identity platform

    options.TokenValidationParameters.ValidateIssuer = false; // accept several tenants (here simplified)
  });

【问题讨论】:

  • 您使用哪个 .net 核心版本?
  • 我的.net核心版本是2.1

标签: c# azure azure-active-directory asp.net-core-2.1


【解决方案1】:

http://schemas.microsoft.com/ws/2008/06/identity/claims/role 是旧的 SAML 声明类型格式。对于 OIDC,Azure AD 将发出一个或多个 roles claims

要解决这个问题,请确保在服务配置期间使用以下代码:

JwtSecurityTokenHandler.DefaultMapInboundClaims = false;

services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.TokenValidationParameters.RoleClaimType = "roles";
});

【讨论】:

  • 代码JwtSecurityTokenHandler.DefaultMapInboundClaims不能在net core 2.1中运行
  • 我设法使用我原始帖子中添加的代码使其工作。它与您的类似,但使用 AzureAD AuthenticationScheme。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2022-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
相关资源
最近更新 更多