尝试解码Jwt时发生错误:签名的JWT被拒绝:预期使用其他算法,或者找不到匹配的密钥

时间:2019-06-17 20:21:42

标签: spring-security openam spring-oauth2 forgerock

我正在尝试使用与弹簧安全性集成的ForgeRock OpenAM设置OAuth2-OpenID Connect,并遇到以下错误

.get()

Jwk众所周知的uri返回以下受支持的算法:

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

解码后的JWT显示以下标头:

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

有没有一种方法可以根据来自标头的值设置特定的JwtDecoder或强制AM使用一种特定算法?

2 个答案:

答案 0 :(得分:1)

是的,您可以告诉AM对OIDC id令牌签名(https://backstage.forgerock.com/docs/am/6.5/oidc1-guide/#configure-oauth2-oidc-client-signing)使用特定的签名算法,但是我怀疑客户端由于缺少密钥而无法验证签名。

请确保...您知道OAuth2和OIDC是不同的主题。

答案 1 :(得分:0)

问题出在访问管理中的令牌加密配置上。它为空,但由于某种原因,JWT标头显示了HS256,这导致spring查找HS256私钥并失败。将设置更改为使用RS256后,一切开始正常工作。