Срок действия JwtSecurityToken составляет два часа - PullRequest
0 голосов
/ 27 апреля 2018

В моем приложении .net core api я использую:

var dt = DateTime.Now.AddMinutes(60); // time is 2018-04-27 14:49:00

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var claims = new[]
              {
                 new Claim(JwtRegisteredClaimNames.Sub, user.Email),
                 new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                 new Claim(JwtRegisteredClaimNames.UniqueName, user.UserName)
              };

var token = new JwtSecurityToken(
        _config["Tokens:Issuer"], 
        _config["Tokens:Audience"], 
        claims,
        expires: dt,
        signingCredentials: creds);

token.ValidTo отображается как 2018-04-27 12:49:00 ...

Почему?

1 Ответ

0 голосов
/ 27 апреля 2018

Это из-за разных часовых поясов. Ваш часовой пояс, вероятно, UTC + 2, а ваша переменная dt содержит время по местному времени.

Но JwtSecurityToken.ValidTo - это значение DateTime, которое содержит время в UTC. Полученный JWT даст вам значение (exp претензия) , основанное на времени эпохи Unix, в секундах с 1970-01-01 00:00 UTC. В вашем случае exp будет

1524833340

что равно

2018-04-27 12:49:00 UTC (14:49 по UTC + 2)

здесь вы можете проверить , и среда JWT знает, как с этим справиться, независимо от часового пояса.

Поведение правильное, и вам не нужно ничего менять.

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