如何验证Angular应用发往后端API的token可通过Azure AD校验?
Azure AD 层面验证 Spring Boot 接收的 MSAL Token 方案
1. 依赖引入与基础配置
首先在Spring Boot项目的pom.xml(Maven)或build.gradle(Gradle)中引入Azure AD官方starter依赖:azure-spring-boot-starter-active-directory
在项目配置文件(application.yml/application.properties)中添加核心配置项:
azure.activedirectory.tenant-id:你的Azure AD B2B租户IDazure.activedirectory.client-id:后端API在Azure AD中注册的应用客户端IDazure.activedirectory.authority:固定为https://login.microsoftonline.com/{替换为你的租户ID}/v2.0,对应Azure AD v2验证端点- 如有需要可额外配置
azure.activedirectory.app-id-uri,即你在Azure AD中为后端API暴露的标识URI,用于受众校验
2. 安全验证逻辑配置
添加Spring Security配置类,启用Azure AD自动验证能力:
- 给配置类添加
@EnableWebSecurity、@EnableGlobalMethodSecurity(prePostEnabled = true)注解,后者用于开启方法级权限校验 - Spring Security 5.7及以上版本直接注册
SecurityFilterChainBean,旧版本继承WebSecurityConfigurerAdapter重写配置方法即可,不需要手动实现JWT解析逻辑 - 框架默认会自动完成所有Azure AD层面的强制校验:
- 签名校验:调用Azure AD公钥接口验证Token签名合法性,排除篡改风险
- 有效期校验:自动校验Token的
exp(过期时间)、nbf(生效时间)字段是否在合法区间 - 受众校验:验证Token的
aud字段是否匹配配置的后端客户端ID/API URI,确保Token是专门发给当前后端服务的 - 发行方校验:验证Token的
iss字段是否匹配配置的租户对应Azure AD发行地址,避免其他租户的非法Token访问 - B2B场景下会自动校验用户所属租户的合法性,符合你配置的多租户访问规则
3. 前端请求与额外校验规则
- Angular端调用接口时必须在请求头中携带
Authorization: Bearer {access_token},注意必须使用access token,不能用前端身份认证用的id token,id token不具备API访问权限 - 若需要校验用户角色、权限等自定义声明,可直接在接口方法上添加
@PreAuthorize("hasAuthority('自定义角色值')")注解,框架会自动从Token声明中提取匹配 - 如需手动获取Token中的用户、租户信息,可直接在接口参数中注入
Authentication对象,从Principal属性中提取所有已解析的声明内容
常见异常排查
- 401未授权优先检查:Token是否过期、是否误用id token、
aud字段是否匹配后端客户端ID、iss是否匹配当前租户发行地址 - B2B外部租户用户访问报错时,检查Azure AD后端应用注册是否开启了多租户支持,配置文件是否添加了对应外部租户的允许规则
内容的提问来源于stack exchange,提问作者user3760894
相关产品推荐
相关产品推荐

