Как сервер ресурсов узнает, какой алгоритм использовать для проверки JWT? - PullRequest
2 голосов
/ 06 февраля 2020

Я создал токен, используя любой алгоритм, скажем, HS256, когда он передается на сервер ресурсов, я вижу реализацию, как показано ниже

TokenValidationParameters validationParameters = new TokenValidationParameters()
{
ValidAudience = ActiveDirectory.audience,
ValidIssuer = ActiveDirectory.issuer,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
LifetimeValidator = this.LifetimeValidator,
IssuerSigningKey = new 
SymmetricSecurityKey(System.Text.Encoding.Default.GetBytes(ActiveDirectory.clientSecret))
};

Обратите внимание, что при проверке токена алгоритм не прошло (это должно быть HS256 для сравнения хэширования).

Теперь допустим, что я изменил алгоритм при создании токена с HS256 на HS512, Здесь мой сервер ресурсов все еще успешно проверяет токен?

Может Кто-нибудь, помогите мне указать алгоритм на сервере ресурсов для проверки по токену.

1 Ответ

1 голос
/ 06 февраля 2020

Информация о том, какой алгоритм использовался для подписи и который должен использоваться для проверки, находится в заголовке JWT:

{
  "alg": "HS256",
  "typ": "JWT"
}

Поэтому вы не настраиваете алгоритм в TokenValidationParameters. Когда бэкэнд получает токен, он получает информацию об алгоритме из заголовка JWT и затем использует этот алгоритм для проверки токена с настроенным ключом или секретом.

Пока у вас есть правильные ключи / секреты (а также правильный тип ключа, например, при переходе к асимметричным c алгоритмам), проверка должна работать.

Поскольку также возможно установить утверждение алгоритма "alg" в none, что означает токен не подписан, необходимо добавить параметр, запрещающий неподписанные токены:

RequireSignedTokens = true,
...