Openiddict.com Сохранить пользовательское утверждение в таблице AspNetUserClaims

У меня есть сервер авторизации на основе 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...


person Set    schedule 04.05.2018    source источник


Ответы (1)


Вы добавляете заявку на двух разных уровнях.

UserManager обращается к хранилищу. Он ищет и сохраняет данные в базе данных, что позволяет реализовать асинхронную реализацию. С другой стороны, ClaimsIdentity не подключен к хранилищу.

Хотя у обоих есть метод AddClaim, UserManager фактически сохраняет данные, а ClaimsIdentity — нет.

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

person Ruard van Elburg    schedule 04.05.2018