Как получить претензии пользователя с помощью токена JWT Bearer - PullRequest
0 голосов
/ 29 января 2019

Отправляю Токен на предъявителя в шапке от Почтальона.Теперь мне нужно получить заявку пользователя в API, используя этот токен на предъявителя.Код, который я пробовал, не работает, значит, я не получаю имя пользователя / адрес электронной почты.Как получить претензию пользователя с помощью токена на предъявителя?

public class RepositoryUserAccount : IRepositoryUserAccount
{
    private readonly HttpContext _httpContext;

    public RepositoryUserAccount(IHttpContextAccessor httpContextAccessor)
    {
        this._httpContext = httpContextAccessor.HttpContext;
    }

    public async Task EnableAuthenticator()
    {
        ClaimsPrincipal currentUser = _httpContext.User;
        var currentUserName = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
    }
}

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Вы регистрируете его как синглтон, как отмечено в вашем комментарии.Рефакторинг этого класса, чтобы использовать IHttpContextAccessor каждый раз или изменить его на транзитивную зависимость.

Вот первый метод:

public class RepositoryUserAccount : IRepositoryUserAccount
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public RepositoryUserAccount(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public async Task EnableAuthenticator()
    {
        ClaimsPrincipal currentUser = _httpContextAccessor.HttpContext.User;
        var currentUserName = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
    }
}
0 голосов
/ 30 января 2019

Что я сделал, так это то, что при запуске я настроил такие сервисы, как

var key = Encoding.ASCII.GetBytes(SECRET_KEY);
            services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, x =>
            {
                x.RequireHttpsMetadata = false;
                x.SaveToken = true;
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(key),
                    ValidateIssuer = false,
                    ValidateAudience = false
                };
            });

, а в контроллере, как я и сделал,

[HttpGet]
[Route("EnableAuthenticator")]
public void EnableAuthenticator()
{
   var user = HttpContext.User;
}

У пользователя мы получим все претензии,Вот и все!

0 голосов
/ 29 января 2019

Давайте предположим, что System.Security.Claims.ClaimTypes является Аутентификацией

var claims = _httpContext.User.Claims.Where(x => x.Type == ClaimTypes.Authentication);
foreach (var claim in claims)
{
    var value = claim.Value; //<= the value of each claim
}
...