Spring Security验证Auth0 Token无法解析Issuer配置错误如何解决
根因分析
报错信息明确指出框架尝试解析Issuer为https://dummy/api的OIDC配置失败,该值是你配置中auth0.audience的取值,说明你在自定义JwtDecoder Bean的代码中错误将audience参数作为Issuer URI传入了初始化逻辑。
Auth0的Token Issuer固定为你的Auth0应用域名也就是https://my-domain-at.auth0.com/,audience是你定义的API标识,两者不能混用。
修复方案
- 修正
SecurityConfig类中jwtDecoder方法的参数取值逻辑,正确区分Issuer和audience配置:
import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.security.oauth2.core.DelegatingOAuth2TokenValidator; import org.springframework.security.oauth2.core.OAuth2TokenValidator; import org.springframework.security.oauth2.jwt.*; public class SecurityConfig { // 正确读取Issuer配置 @Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}") private String issuerUri; // 读取audience配置做校验用 @Value("${auth0.audience}") private String apiAudience; @Bean public JwtDecoder jwtDecoder() { // 构造audience校验器 OAuth2TokenValidator<Jwt> audienceValidator = new AudienceValidator(apiAudience); // 构造Issuer校验器 OAuth2TokenValidator<Jwt> issuerValidator = JwtValidators.createDefaultWithIssuer(issuerUri); // 组合校验规则 OAuth2TokenValidator<Jwt> combinedValidator = new DelegatingOAuth2TokenValidator<>(issuerValidator, audienceValidator); // 用正确的Issuer初始化解码器 NimbusJwtDecoder decoder = JwtDecoders.fromOidcIssuerLocation(issuerUri); decoder.setJwtValidator(combinedValidator); return decoder; } }
- 若本地开发环境存在网络限制无法访问Auth0公网域名,可补充配置JWK地址跳过启动时的OIDC配置拉取:
spring: security: oauth2: resourceserver: jwt: issuer-uri: https://my-domain-at.auth0.com/ # 新增JWK配置,值为你的Auth0域名加/.well-known/jwks.json jwk-set-uri: https://my-domain-at.auth0.com/.well-known/jwks.json
- 校验所有配置值和Auth0后台的配置完全一致,特别注意域名末尾的斜杠不要遗漏。
内容的提问来源于stack exchange,提问作者neekheel
相关产品推荐
相关产品推荐

