Как проверить JWT, используя UTC-время, используя .NET Core - PullRequest
2 голосов
/ 25 марта 2019

В настоящее время я программирую ASP.NET-Core WebApi, используя JWT-Bearer-Authentication.

Чтобы сделать API доступным из разных часовых поясов, я использую следующий шаблон для установки полей nbf (notBefore) и exp (срок действия) в моем JWT на UTC-метку времени:

var utcNow = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Unspecified);

...

var tokenOptions = new JwtSecurityToken(
                notBefore: utcNow,
                expires: utcNow.AddSeconds(3600),
            );
...

Для генерации токенов все работает довольно хорошо, nbf и exp содержат метку времени UNIX, представляющую текущее время UTC.

Но когда выполняется проверка токена, все работает в течение 5 минут (моя настройка перекоса часов), а затем я получаю только 401 от API, потому что проверка токена выполняется с моим текущим часовым поясом здесь, в Германии.

Есть ли способ настроить промежуточное ПО JwtAuthentication в .NET-Core для использования UTC-Time для проверки токена? Или есть другие способы решить эту проблему?

1 Ответ

1 голос
/ 03 мая 2019

Одним из решений является проверка токена без истечения срока действия. Это вернет действительный токен, даже если токен истек. Затем в вашем коде вручную проверьте срок действия токенов. Вот фрагменты кодов:

var validationParameters = new TokenValidationParameters()
{
   RequireExpirationTime = false,  // we can check manually
   ValidateIssuer = true,
   ValidateAudience = true,

   .
   .
   IssuerSigningKey = new SymmetricSecurityKey(symmetricKey)
};

Затем, когда токен проверен, проверьте срок действия с помощью:

public bool IsExpired(DateTime now)
{
    return JwtSecurityToken.ValidTo > now;
}

Надеюсь, этот ответ кому-нибудь поможет.

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