У меня есть сервер авторизации на основе 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;
}
}
Это работает, и «демонстрационное» утверждение добавляется к токену и доступно в User.Claims
из действия контроллера (я использую промежуточное программное обеспечение проверки OAuth2). Единственное, что смущает, это то, что запись с этим утверждением не добавляется в таблицу AspNetUserClaims
. Я обнаружил, что могу «исправить» это, добавив его непосредственно в метод GenerateClaimsAsync
через:
await UserManager.AddClaimAsync(user, customClaim);
и теперь мне интересно, правильный ли это подход, или есть какой-то простой шаг настройки, может быть, что-то вроде флага «option», который мне просто нужно включить во время установки openiddict...