Spring Boot资源服务器无法验证Azure AD颁发的JWT令牌
解决Azure AD Client Credentials模式下Spring Boot API的JWT无效签名问题
问题根源
Azure AD通过Client Credentials模式颁发的JWT采用RS256非对称加密算法签名,你的问题核心是Spring资源服务器未正确加载Azure的公钥来验证签名,或配置存在不匹配。
分步解决方案
确认Issuer URI配置正确性
确保spring.security.oauth2.resourceserver.jwt.issuer-uri格式为https://login.microsoftonline.com/{你的租户ID}/v2.0,替换实际租户ID后,直接访问该URI,能返回包含jwks_uri字段的OpenID配置则说明URI有效。检查依赖完整性
确保项目引入了正确的Spring OAuth2资源服务器依赖:<!-- Maven示例 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>避免混用旧版
spring-security-oauth2等依赖。强制指定JWT签名算法
在配置文件中明确指定RS256算法,避免Spring自动识别错误:# application.properties spring.security.oauth2.resourceserver.jwt.jws-algorithms=RS256校验Token的Issuer一致性
解码Token的Payload,查看iss字段值,必须与你配置的issuer-uri完全一致(包括路径后缀、大小写),否则Spring会判定Token无效。检查Azure AD应用注册配置
- API应用注册需在「公开API」中定义应用级权限(Client Credentials模式使用应用权限,而非委托权限);
- 客户端应用需已添加该API的应用权限,且完成管理员同意(应用级权限必须由租户管理员授权)。
内容的提问来源于stack exchange,提问作者dsreddy
相关产品推荐
相关产品推荐

