首页 > 解决方案 > 签名的 JWT 被拒绝:需要另一个算法,或者找不到匹配的密钥

问题描述

使用 Spring Boot OAuth 资源服务器启动项目,版本 - 2.4.4。我收到以下异常,我在代码中找不到太多问题,因为它在我们的 preprod env 中运行良好,但在 prod 环境中没有工作
到目前为止观察,
我已经检查过,并想确认孩子是否从 jwk uri 和从 token 收到的孩子是不同的,那么这个异常可能吗?注意,在 pre-prod 环境中,kid 对于 token 和 jwk uri 是相同的。
来自 jwk uri -来自 jwt 标头-查看 此代码,用于检查密钥 id 代码段,第 253 行 .. 但我无法进一步了解它。
在此处输入图像描述

在此处输入图像描述

com.nimbusds.jose.proc.BadJOSEException: Signed JWT rejected: Another algorithm expected, or no matching key(s) found
    at com.nimbusds.jwt.proc.DefaultJWTProcessor.process(DefaultJWTProcessor.java:384) ~[nimbus-jose-jwt-8.20.2.jar:8.20.2]
    at com.nimbusds.jwt.proc.DefaultJWTProcessor.process(DefaultJWTProcessor.java:330) ~[nimbus-jose-jwt-8.20.2.jar:8.20.2]
    at org.springframework.security.oauth2.jwt.NimbusJwtDecoder.createJwt(NimbusJwtDecoder.java:153) ~[spring-security-oauth2-jose-5.4.5.jar:5.4.5]

标签: spring-bootjwtspring-security-oauth2nimbus-jose-jwt

解决方案


如果kid来自您的令牌和kid来自 JWKS 端点的 不匹配,则会出现此异常。

仔细检查您的配置,您可能有一个客户端尝试使用来自不同发行者的令牌(可能来自您的 pre-prod)。

JWT应该在正文中包含一个iss可以帮助您追踪问题的字段。


推荐阅读