pac4j 在刷新过期令牌时返回错误

问题描述 投票:0回答:1

检查了

pac4j-5.7.7
pac4j-6.0.6
并使用 Keycloak 和 AWS Cognito 作为 OpenId 提供商,在所有 4 种情况下始终可重现。

当我将客户端配置为使用令牌中的

nonce
时,我可以毫无问题地获取第一个令牌。但是,一旦令牌过期并且必须刷新它,我就会收到错误

com.nimbusds.jose.proc.BadJOSEException: Signed JWT rejected: Another algorithm expected, or no matching key(s) found
 at PluginClassLoader for oic-auth//com.nimbusds.jwt.proc.DefaultJWTProcessor.process(DefaultJWTProcessor.java:357)
 at PluginClassLoader for oic-auth//com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:321)
 at PluginClassLoader for oic-auth//com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:254)
 at PluginClassLoader for oic-auth//org.pac4j.oidc.profile.creator.TokenValidator.validate(TokenValidator.java:108)
 at PluginClassLoader for oic-auth//org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:109)
Caused: org.pac4j.core.exception.TechnicalException
 at PluginClassLoader for oic-auth//org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:153)
 at PluginClassLoader for oic-auth//org.pac4j.core.client.BaseClient.retrieveUserProfile(BaseClient.java:126)
 at PluginClassLoader for oic-auth//org.pac4j.core.client.BaseClient.getUserProfile(BaseClient.java:105)
 at PluginClassLoader for oic-auth//org.pac4j.oidc.client.OidcClient.renewUserProfile(OidcClient.java:69)

我从OpenId规范的理解刷新令牌不应该有nonce声明,即使在原始身份验证时颁发的ID令牌包含nonce。如果存在,其值必须与原始身份验证时颁发的 ID Token 中的值相同。

如果我使用

OicdConfiguration
设置
setUseNonce(false)
对象,则不会发生错误,就好像验证器始终期望刷新令牌中的随机数声明一样。但是,如果我使用
OicdConfiguration
设置
setUseNonce(true)
对象,我无法刷新令牌,这似乎违反了 OpenId 规范。

pac4j
1个回答
0
投票

nonce
位于 ID 令牌中,而不是刷新令牌中。

由于 ID 令牌验证失败,我猜会在

Successful Refresh Response
上返回 ID 令牌,对吧?

此 ID 令牌是否包含

nonce

© www.soinside.com 2019 - 2024. All rights reserved.