Почему библиотека IdentityModel JWT генерирует один и тот же токен, если предоставляется один и тот же срок действия? - PullRequest
0 голосов
/ 23 января 2019

В моем приложении есть следующий код для создания JWT для аутентификации в REST API:

    private string GenerateToken(List<Claim> identityFields)
    {
        var key = Convert.FromBase64String(__SECRET);
        var securityKey = new SymmetricSecurityKey(key);
        var descriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(identityFields.ToArray()),
            Expires = DateTime.UtcNow.AddDays(1),
            SigningCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature)
        };

        var handler = new JwtSecurityTokenHandler();
        var token = handler.CreateJwtSecurityToken(descriptor);
        return handler.WriteToken(token);
    }

Параметр identityFields - это объект со значениями от пользователя (которые здесь не актуальны).

Моя основная проблема заключается в том, что когда я отправляю два запроса этому методу за одну секунду (я имею в виду, например, 2019-01-23 14: 57: 59.827 и 2019-01-23 14: 57: 59.350) , он генерирует один и тот же JWT для обоих сеансов (принимая во внимание, что, конечно, «identityFields» одинаково), потому что свойство «Expires» не имеет значения в миллисекундах.

Как можно решить эту проблему?

Я использую официальную библиотеку JWT (System.IdentityModel.Tokens.Jwt), а не пользовательский код.

Спасибо!

1 Ответ

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

Я рекомендую взглянуть на https://blogs.msdn.microsoft.com/webdev/2016/10/27/bearer-token-authentication-in-asp-net-core/

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

Если вам необходимо сохранить информацию в секрете (поскольку любой может декодировать токен JWT), вы можете добавить уникальный идентификатор в качестве пользовательского утверждения и использовать его для поиска информации в вашей базе данных.

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