Идентификатор токена не содержит адрес электронной почты при запросе объема - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть приложение для сервера идентификации 4, и я добавил его в таблицу области электронной почты [IdentityResources] в базе данных.Я также добавил область электронной почты на клиент, который я использую с моим клиентским приложением.

Клиентское приложение теперь запрашивает у пользователя согласие на область электронной почты после входа в систему.

enter image description here

Я также вижу, что он существует в UserClaimsPrincipalFactory

Асинхронное защищенное асинхронное задание Задача

GenerateClaimsAsync(ApplicationUser user)
        {
            var identity = await base.GenerateClaimsAsync(user);
            if (user.IsXenaSupporter)
                identity.AddClaim(new Claim("Supporter", user.Id.ToString()));
            return identity;
        }

Идентификация содержит электронную почту.Тем не менее, когда токен Id и токен доступа возвращаются в приложение, они также не содержат электронной почты.И при этом я не получаю электронное письмо, когда я запрашиваю его из конечной точки информации о пользователе.

Что мне нужно сделать, чтобы заполнить адрес электронной почты в утверждениях, когда приложение запрашивает область электронной почты?Также не добавляется моя заявка на поддержку пользователей

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Проблема заключалась в том, что я только добавил его в таблицу [IdentityResources].

enter image description here

Это просто определяет различные области.Но на самом деле он не присваивает никаких данных.

Для этого мне нужно было добавить их в таблицу [IdentityClaims].

enter image description here

Как только я это сделал, в претензиях начали возвращаться данные.

0 голосов
/ 23 ноября 2018

Простой факт, что клиентское приложение запрашивает у вас только область электронной почты, означает, что область была разрешена в IdentityServer и запрошена на стороне клиента, но не обязательно, что эта информация извлекается.

Волшебство заключается в методе GetProfileDataAsync вашей реализации IProfileService.

Эта служба профилей позволяет получать любые требуемые утверждения и добавлять их в ProfileDataRequestContext.

public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
    var subjectId = context.Subject.GetSubjectId();
    Guid.TryParse(subjectId, out Guid g);

    //whatever way or wherever you retrieve the claims from
    var claimsForUser = idRepo.GetUserClaimsBySubjectId(g);

    context.IssuedClaims = claimsForUser.Select(c => 
        new Claim(c.ClaimType, c.ClaimValue)).ToList();

    return Task.FromResult(0);
}
*.1010 * Как объяснено здесь , токен id должен в значительной степени иметь только суб-утверждение - для этого нужна конечная точка userinfo.
...