tentrun
@tentrun
Clown c# inside

Почему не работает JWT bearer token?

Есть метод контроллера на получение токена
Код метода получения токена
public async Task<IActionResult> Auth([FromHeader] string Authorization)
    {
       //Получаем claims из BasicAuthentication токена
        var user = GetClaims(Authorization);
        var claims = new List<Claim>() { new Claim(ClaimTypes.Name, user.Username) };

        var utcNow = DateTime.UtcNow;
        var jwt = new JwtSecurityToken(
            issuer: AuthOptions.ISSUER,
            notBefore: utcNow,
            claims: claims,
            expires: utcNow.AddHours(AuthOptions.TokenLifetime),
            signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(),
                SecurityAlgorithms.HmacSha256));

        var jwtToken = new JwtSecurityTokenHandler().WriteToken(jwt);

        return Ok(jwtToken);
    }


Код регистрации сервиса

private static IServiceCollection AddJwtBearerAuthentication(this IServiceCollection services)
    {
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata = true;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidIssuer = AuthOptions.ISSUER,
                    ValidateLifetime = true,
                    ClockSkew = TimeSpan.Zero,
                    ValidateAudience = false,
                    IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
                    ValidateIssuerSigningKey = true,
                };
            });
        return services;
    }


Токен генерируется и отдается, но при попытке получить доступ к контроллеру с аттрибутом
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
сразу же отдает 401 Unauthorized. В чем причина? Время жизни токена 6 часов
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
tentrun
@tentrun Автор вопроса
Clown c# inside
Решил проблему.
Баг с Microsoft.IdentityModel.Tokens
Ссылка на issue

Помог откат пакета на 6.27.0 с 6.30.1
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы