Произошла ошибка при попытке декодировать JWT: подписанный JWT отклонен: ожидается другой алгоритм или не найдены соответствующие ключи

Я пытаюсь настроить OAuth2-OpenID Connect с ForgeRock OpenAM, интегрированным с Spring Security, и получаю следующую ошибку

2019-06-17 15:01:42.576 DEBUG 62255 --- [nio-8090-exec-2] .o.s.r.w.BearerTokenAuthenticationFilter : 
Authentication request for failed: org.springframework.security.oauth2.core.OAuth2AuthenticationException: 
An error occurred while attempting to decode the Jwt: 
Signed JWT rejected: Another algorithm expected, or no matching key(s) found

Jwk .well-known uri возвращает следующие поддерживаемые алгоритмы:

"id_token_signing_alg_values_supported": [
    "PS384",
    "ES384",
    "RS384",
    "HS256",
    "HS512",
    "ES256",
    "RS256",
    "HS384",
    "ES512",
    "PS256",
    "PS512",
    "RS512"
  ]

Декодированный JWT показывает следующий заголовок:

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

Есть ли способ установить конкретный JwtDecoder на основе значения, поступающего из заголовка, или заставить AM использовать один конкретный алгоритм?


person Adnan Mamajiwala    schedule 17.06.2019    source источник


Ответы (2)


Проблема была с конфигурацией в управлении доступом на шифровании токена. Он был пустым, но по какой-то причине заголовок JWT показывал HS256, из-за чего Spring искал закрытый ключ HS256 и терпел неудачу. После того, как я изменил настройку на использование RS256, все заработало.

person Adnan Mamajiwala    schedule 23.06.2019
comment
+1 Для KeyCloak 10.0.1 пришлось сделать аналогичную настройку Алгоритма подписи по умолчанию в Realm /Tokens на RS256 (или что вы предпочитаете) - person meDev; 04.06.2020

Да, вы можете указать AM использовать определенный алгоритм подписи для подписи токена идентификатора OIDC (https://backstage.forgerock.com/docs/am/6.5/oidc1-guide/#configure-oauth2-oidc-client-signing), но я подозреваю, что клиент не может проверить подпись из-за отсутствия ключа.

Просто чтобы убедиться... вы знаете, что OAuth2 и OIDC - это разные темы.

person Bernhard Thalmayr    schedule 18.06.2019
comment
Спасибо, Бернхард, но ключ есть. OIDC является расширением OAuth2, поэтому я бы не сказал, что это совершенно разные темы. - person Adnan Mamajiwala; 23.06.2019