Токен авторизации на основе утверждений в Azure B2C и .Net Core 2.0

Я создаю приложение ASP .Net Core 2.0 и хотел бы знать, как добавить утверждение групп в мой токен доступа Azure B2C на моем сервере. Я использую идентификатор пользователя, чтобы запросить MS Graph, чтобы получить утверждение группы пользователя с помощью ADAL, и мне нужны группы в токене авторизации каждый раз, когда пользователь обращается к контроллеру. Я бы предпочел не запрашивать MS Graph каждый раз при попадании в контроллер.

Можно ли добавить утверждение группы в токен B2C после его получения?

Если нет, следует ли мне хранить группы как переменную сеанса?

Если это не так, должен ли я создать второй токен авторизации с группами, а затем использовать его в моем заголовке при отправке запросов?


person afriedman111    schedule 08.08.2019    source источник


Ответы (1)


Вы можете в одном из уведомлений OpenID (например, OnTokenValidated) и добавить группы пользователей (или роли, но они разные) в ClaimsPrincipal. Что-то вроде :

options.Events = new OpenIdConnectEvents
{

    OnTokenValidated =  ctx =>
    {
        //query the user's groups using api 

        // add claims
        var claims = new List<Claim>
        {
            new Claim("groups", xxxx-xx-xx)
        };
        var appIdentity = new ClaimsIdentity(claims);

        ctx.Principal.AddIdentity(appIdentity);

        return Task.CompletedTask;
    },   
};

Ниже по ссылкам приведен пример кода для .NET Framework, который можно изменить в соответствии с версией ядра .net:

Авторизация по группе в Azure Active Directory B2C

Azure AD B2C - управление ролями

Вы можете поддержать добавление групповых утверждений к токенам, выпущенным b2c, проголосовав за него на форуме отзывов Azure AD B2C: Получить группы членства пользователей в утверждениях с помощью Azure AD B2C

person Nan Yu    schedule 09.08.2019
comment
Выполняется ли это каждый раз, когда запрос попадает в контроллер / действие, требующее аутентификации? Кажется, это займет слишком много времени. Я хотел спросить, как добавить утверждение группы к токену, а затем отправить его клиенту, чтобы MS Graph не нужно было запрашивать несколько раз. - person afriedman111; 09.08.2019
comment
@ afriedman111, в настоящее время это невозможно, вы можете проголосовать за запрос функции, как показано выше. - person Nan Yu; 12.08.2019
comment
Спасибо за ответ, Нан, это то, что я подозревал. - person afriedman111; 12.08.2019