Невозможно получить роль от вошедшего в систему пользователя Azure AD B2C

Я пытаюсь использовать следующее, чтобы определить, является ли зарегистрированный пользователь Azure AD B2C администратором:

if (User.IsInRole("Administrator")) 
{
    .... Display special info for Admins ....
}

Тем не менее, когда я смотрю в System.Security.Principal.IPrincipal.User объект, я вижу null для списка ролей, которые имеет этот пользователь:

Ниже приведен соответствующий код, который настраивает аутентификацию и запросы. TokenValidationParameters В том числе и для ролей, подлежащих валидации. Я пробовал следующее: RoleClaimType = "role" а также RoleClaimType = "roles", оба из которых не сработали для меня.

    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseKentorOwinCookieSaver();

        app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            CookieSecure = CookieSecureOption.Always
        });

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                // Generate the metadata address using the tenant and policy information
                MetadataAddress = String.Format(AadInstance, Tenant, DefaultPolicy),

                // These are standard OpenID Connect parameters, with values pulled from web.config
                ClientId = ClientId,
                Authority = Authority,
                PostLogoutRedirectUri = RedirectUri,
                RedirectUri = RedirectUri,

                Notifications = new OpenIdConnectAuthenticationNotifications()
                {
                    RedirectToIdentityProvider = OnRedirectToIdentityProvider,
                    AuthenticationFailed = OnAuthenticationFailed,
                    AuthorizationCodeReceived = OnAuthorizationCodeReceived
                },

                /////////// HERE //////////
                // Specify the claims to validate
                TokenValidationParameters = new TokenValidationParameters
                {
                    NameClaimType = "name",
                    RoleClaimType = "role",
                },

                // Specify the scope by appending all of the scopes requested into one string (seperated by a blank space)
                Scope = $"{OpenIdConnectScopes.OpenId} {ReadTasksScope} {WriteTasksScope}"
            }
        );
    }

Тем не менее, когда я декодирую id_token извлеченный из процесса аутентификации и декодирующий его с помощью инструмента https://jwt.ms/, я не вижу претензии "ролей", как показано на скриншоте.

Кроме того, в политике SignIn Azure AD B2C, возможно, мне нужно добавить ClaimType для "ролей"?

Пожалуйста помоги! Что еще мне нужно сделать, чтобы получить User.IsInRole("Administrator") работать? Спасибо!

1 ответ

Решение

Чтобы решить эту проблему, я использовал клиент Azure AD Graph для запроса всех ролей каталога, принадлежащих пользователю с указанным objectId, Вот метод, который я добавил:

    public async Task<string> GetUserRoleByObjectId(string objectId)
    {
        return await SendGraphGetRequest("/users/" + objectId + "/$links/memberOf", null);
    }

Я добавил этот метод в B2CGraphClient.cs файл в следующем примере кода, который я интегрировал в свое веб-приложение: https://github.com/AzureADQuickStarts/B2C-GraphAPI-DotNet

Другие вопросы по тегам