MSAL2+Angular12调用.Net5 WebApi返回401提示audience无效如何解决
Azure AD调用后端API返回401(audience无效)排查解决方案
核心问题为前端获取的访问令牌受众(aud字段)与后端API配置的预期受众不匹配,你遇到的错误信息如下:
www-authenticate: Bearer error="invalid_token", error_description="The audience 'api://my-guid' is invalid"
按以下步骤逐一排查即可定位解决:
1. 优先校验令牌实际内容
从浏览器网络面板复制请求携带的完整Bearer令牌,粘贴到jwt.io解析,确认aud字段的实际值,所有后端配置必须和这个实际值完全一致,不要仅凭注册信息推断配置值。
2. 修正后端.NET 5 WebApi配置
2.1 配置文件校验
检查appsettings.json中Azure AD配置节点,必须同时显式指定ClientId和Audience,不要省略前缀:
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "TenantId": "你的Azure AD租户ID", "ClientId": "api://你的后端应用注册GUID", "Audience": "api://你的后端应用注册GUID" }
如果使用中国区Azure,Instance字段替换为https://login.chinacloudapi.cn/。
2.2 服务注册代码校验
检查Startup.cs的认证服务注册逻辑,使用官方提供的标准重载,不要手动修改JWT验证参数:
services.AddMicrosoftIdentityWebApiAuthentication(Configuration, "AzureAd");
3. 前端Angular配置校验
- 检查
protectedResourceMap中配置的后端API对应作用域,必须为完整格式api://后端应用注册GUID/自定义作用域名,不可仅写作用域名或省略api://前缀 - 确认MSAL获取访问令牌时请求的
scopes参数包含上述完整作用域,不可直接用后端GUID作为scope值
4. 特殊场景排查
- 核对后端应用注册的「应用ID URI」配置,如果你手动修改为自定义域名格式(如
https://api.你的企业域名.com),则所有配置中的audience需要同步替换为该自定义URI - 如果是多租户应用,确认
TenantId配置为common或对应组织的租户ID,不要填写错误的租户值 - 确认后端应用注册没有开启「访问令牌需要版本2」的配置,如果开启则需要对应调整后端的令牌版本验证参数
内容的提问来源于stack exchange,提问作者Matteo Mosca
相关产品推荐
相关产品推荐

