Azure AD Spring Boot Starter保护Java Web应用的JWT令牌算法问题
问题排查解决步骤
- 首先检查Azure AD应用注册的重定向URI配置:你当前应用运行在
https://mydomain:8081,需要确认客户的Azure AD应用注册里,Web平台的重定向URI已经添加了https://mydomain:8081/login/oauth2/code/azure,后缀不能省略,且必须和你实际部署的域名、端口、协议完全匹配,任意字符不匹配都会触发登录后报错。 - 检查租户基础配置:
- 确认
azure.activedirectory.tenant-id填写的是客户租户的正确ID,没有误填为你个人账号的租户ID - 确认客户的Azure AD租户没有开启用户登录限制,你用于测试的用户账号归属该租户,且已被允许访问这个应用注册
- 确认
- 检查组权限配置:你配置了
azure.activedirectory.user-group.allowed-groups=group1,需要确认:- 客户租户中确实存在名为
group1的安全组 - 测试登录的用户已经被加入
group1组 - 应用注册已经配置了
GroupMember.Read.All或Directory.Read.All的API权限,且已被租户管理员授予管理员同意,否则应用无法读取用户组信息会抛出权限类错误
- 客户租户中确实存在名为
- 检查会话配置冲突:你配置了
azure.activedirectory.session-stateless=true,但Spring Security配置未适配无状态会话,需要补充会话管理规则,修改后的代码参考如下:
@Override protected void configure(HttpSecurity http) throws Exception { http.cors().and().csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests().anyRequest().authenticated() .and().oauth2Login() .and().csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .and().oauth2Client(); }
- 检查SSL证书信任配置:你配置了自定义信任库,确认Azure AD的根证书已经被导入到你指定的
/apps/tomcat/conf/trusted.jks文件中,否则应用调用Azure AD接口时会触发SSL握手失败错误。
内容的提问来源于stack exchange,提问作者Mario Petrovic
相关产品推荐
相关产品推荐

