У меня есть сервер авторизации на основе openiddict 2.0. Что мне нужно, это добавить пользовательскую заявку. После некоторых поисков я пришел к пользовательской реализации UserClaimsPrincipalFactory
:
public class CustomUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser, IdentityRole>
{
public CustomUserClaimsPrincipalFactory(
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager,
IOptions<IdentityOptions> optionsAccessor)
: base(userManager, roleManager, optionsAccessor)
{
}
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(ApplicationUser user)
{
var customClaim = new Claim("demo", "some value");
var identity = await base.GenerateClaimsAsync(user);
identity.AddClaim(customClaim);
return identity;
}
}
Это работает, и в токен добавлено требование "demo", которое доступно в User.Claims
из действия контроллера (я использую промежуточное ПО для проверки OAuth2). Единственное, что сбивает с толку, это то, что запись с этим утверждением не добавляется в таблицу AspNetUserClaims
. Я обнаружил, что могу «исправить» это, добавив его непосредственно в GenerateClaimsAsync
метод с помощью:
await UserManager.AddClaimAsync(user, customClaim);
и теперь мне интересно, правильный ли это подход, или есть какой-то простой шаг настройки, может быть, что-то вроде флага "option", который мне просто нужно включить во время установки openiddict ...