我正在尝试使用与弹簧安全性集成的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使用一种特定算法?
答案 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后,一切开始正常工作。