Openiddict. Сохранить пользовательскую заявку в таблицу AspNetUserClaims - PullRequest
0 голосов
/ 04 мая 2018

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

1 Ответ

0 голосов
/ 05 мая 2018

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

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

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

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

...