У меня есть правильный токен после того, как Почтальон получил 401 Несанкционированный. Net Базовая идентификация после предоставления недействительного токена? - PullRequest
0 голосов
/ 16 января 2020

Не уверен, почему мой токен недействителен. Я извлекаю его с помощью Postman, вызывающего login (), а затем вставляю его в JWT.io, где написано «недопустимая подпись». Я могу вставить свой секретный ключ в JWT.io, и он будет проверен, но это не так, потому что затем он изменяет маркер к чему-то другому, то, что мой метод входа возвращает пользователю! Вот мой токен и секретный ключ "Супер секретный ключ". Маркер becaomes действителен при вставке в JWT.io

eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIxIiwidW5pcXVlX25hbWUiOiJjaHVjayIsInJvbGUiOlsiTWVtYmVyIiwiQWRtaW4iXSwibmJmIjoxNTc5MTU5NDQ0LCJleHAiOjE1NzkyNDU4NDQsImlhdCI6MTU3OTE1OTQ0NH0.Uau2W66y7Kdj01MQbBeoOXiwVzQJSDMEZnbQc2jt1qUyfdc9N5bsla1VGMPHQPjRAcnKSfY3NwQBhCRE-SHZCQ

Вот где я вставляю свой секретный ключ для проверки маркера

enter image description here

Затем я создаю новый запрос получения почтальона, чтобы получить некоторые значения, и использую токен, отправленный обратно из логина. Но я получаю 401 Несанкционированный.

Я добавил токен (тот же, который мне прислал логин, а не измененный после того, как я его проверил) в почтальоне, как это enter image description here

Я также добавил " IdentityModelEventSource.ShowPII = true; " в файл запуска, чтобы показать дополнительную отладку и вот что я вижу в консоли отладки.

Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler 1 Не удалось проверить токен. Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: IDX10503: Ошибка проверки подписи. Ключи пробовали: «Microsoft.IdentityModel.Tokens.SymmetricSecurityKey, KeyId:». Выявленные исключения: ''. токен: '{"alg": "HS512", "typ": "JWT"}. {"nameid": "1", "unique_name": "chuck", "role": ["Member", "Admin" ], "nbf": 1579159444, "exp": 1579245844, "iat": 1579159444} '.

Я могу вставить свой код генерации токена, если будет предложено. Любое объяснение в понимании того, что здесь происходит, будет высоко ценится. Вопросы - я пропустил шаг? Предоставляю ли я тот же токен, который логин отправляет мне обратно авторизованному методу контроллера или измененному токену (пробовал оба)?

Вот код, который я использую для создания токена.

    private async Task<string> GenerateJwtToken(User user)
    {
        var claims = new List<Claim>
        {
            new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
            new Claim(ClaimTypes.Name, user.UserName)
        };

        var roles = await _userManager.GetRolesAsync(user);

        foreach (var role in roles)
        {
            claims.Add(new Claim(ClaimTypes.Role, role));
        }

        var key = new SymmetricSecurityKey(Encoding.UTF8
            .GetBytes(_config.GetSection("AppSettings:Token").Value));

        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Expires = DateTime.Now.AddDays(1),
            SigningCredentials = creds
        };

        var tokenHandler = new JwtSecurityTokenHandler();

        var token = tokenHandler.CreateToken(tokenDescriptor);

        return tokenHandler.WriteToken(token);
    }

1 Ответ

0 голосов
/ 17 января 2020

Я добавил

app.Authentication()

для запуска, и это сработало ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...