Авторизация на основе ролей AzureAD - PullRequest
0 голосов
/ 08 мая 2020

У меня есть приложение, зарегистрированное в AzureAdd AppRegistrations, и добавлено AppRoles в manifest для моего приложения, роль администратора. В меню Azure Enterprise Application я добавил пользователя и назначил ему роль администратора, которую я мог выбрать.

В классе 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>
}

РЕДАКТИРОВАТЬ (8 мая): Используя this do c от Microsoft, я заставил его работать. Добавил в свой 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)
  });

1 Ответ

1 голос
/ 08 мая 2020

http://schemas.microsoft.com/ws/2008/06/identity/claims/role - это старый формат типа утверждения SAML. Для OID C Azure AD выдаст одно или несколько требований ролей .

Чтобы решить эту проблему, убедитесь, что во время настройки службы используется следующий код:

JwtSecurityTokenHandler.DefaultMapInboundClaims = false;

services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.TokenValidationParameters.RoleClaimType = "roles";
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...