Ядро AspNet — настройки `NameClaimType` и `RoleClaimType`

#asp.net-core #asp.net-identity

#asp.net-core #asp.net-идентификатор

Вопрос:

Как мне изменить значения идентификатора NameClaimType и RoleClaimType на «sub» и «role» вместо приведенных ниже URL-адресов SOAP по умолчанию:

NameClaimType и RoleClaimType (Подробнее о мотивации этой проблемы на github:https://github.com/GestionSystemesTelecom/fake-authentication-jwtbearer/issues/4 )

Ответ №1:

При создании ClaimsIdentity класса происходит перегрузка конструктора, которая позволяет указать тип утверждения для имени и роли. Смотрите официальные документы api.

Комментарии:

1. Я использую дополнительную авторизацию при настройке своих служб, и нет возможности передать мой собственный ClaimsIdentity экземпляр. Я хочу настроить это в неправильном месте?

2. Настроенная вами служба аутентификации фактически отвечает за замену идентификатора afaik. Какой из них вы используете? Исходя из вашей проблемы с GitHub, я бы предположил, что вы звоните AddAuthentication().AddJwtBearer() ?

3. Это правильно. Я просмотрел AddJwtBearer параметры и также не смог найти ничего, связанного с настройкой пользовательского ClaimsIdentity экземпляра.

4.У меня нет настройки, где я мог бы быстро протестировать это, но сработает ли это, если переопределить TokenValidationParameters NameClaimType и RoleClaimType в AddJwtBearer ?

Ответ №2:

  1. Настройте свою идентификацию
 services.AddDefaultIdentity<IIdentityUser>(options =>
{ 
    options.ClaimsIdentity.UserNameClaimType = "sub";
    options.ClaimsIdentity.RoleClaimType = "role";
})
  
  1. Настройте свой токен JWT
 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
     .AddJwtBearer(options =>
     {
           options.TokenValidationParameters.NameClaimType = "sub";
           options.TokenValidationParameters.RoleClaimType = "role";
     });
  
  1. Используйте await CreateAsync(user) метод в IUserClaimsPrincipalFactory<IIdentityUser> экземпляре. Это создаст правильный ClaimsIdentity объект с утверждениями пользователя, который вы сможете использовать во время генерации токена JWT.
 var principal = await _userClaimsPrincipalFactory.CreateAsync(user);
var token = new JwtSecurityToken(issuer, audience, principal.Claims, notBefore, expires, credentials);
  

Комментарии:

1. Параметры настройки. TokenValidationParameters.NameClaimType сработал. Спасибо!

Ответ №3:

Чтобы задать пользовательские имена утверждений, используйте приведенный ниже код

  services.Configure<IdentityOptions>(options =>
 {
    options.ClaimsIdentity.UserNameClaimType = "value";
    options.ClaimsIdentity.UserIdClaimType = "value";
    options.ClaimsIdentity.RoleClaimType = "value";
 });
  

Комментарии:

1. но в моем случае это работает для всех свойств IdentityOptions, таких как [Пользователь, пароль, блокировка], и вообще не изменяет ClaimsIdentity. IdentityServer 4 Core 3.0 Кто-нибудь может помочь?