You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android使用MSAL获取Azure AD令牌调用SharePoint API时受众验证失败问题求助

Android使用MSAL获取Azure AD令牌调用SharePoint API时受众验证失败问题求助

哥们,你遇到的这个受众验证失败问题我之前做SharePoint集成时也踩过坑,核心原因其实很明确:你用MSAL获取的令牌受众(Audience)和SharePoint API要求的不匹配。

先给你拆解下问题:你之前用的Sites.FullControl.All是Microsoft Graph的权限 scope,MSAL默认会把这种scope对应到Graph的资源(https://graph.microsoft.com),所以你拿到的令牌是给Graph用的,而SharePoint REST API需要的是针对SharePoint租户资源的令牌,自然会触发受众验证失败的错误。

下面给你一步步的解决办法:

1. 先确认当前令牌的受众

把你获取到的access token复制到jwt.ms里解析(这是微软官方的JWT解析工具,本地就能用不用跳转),查看aud字段:

  • 如果显示的是https://graph.microsoft.com,那百分百是受众不对,这就是问题根源。
  • 正确的aud应该是你的SharePoint租户地址,比如https://your-company-name.sharepoint.com。

2. 修改MSAL请求的Scope配置

把你代码里的Scope数组改成针对SharePoint资源的格式:
原来的代码:

private final static String[] SCOPES = {"Sites.FullControl.All"};

替换成:

// 把your-company-name改成你实际的SharePoint租户域名
private final static String[] SCOPES = {"https://your-company-name.sharepoint.com/.default"};

这里的.default是OAuth 2.0的一种特殊scope,作用是让Azure AD返回你的应用注册中已配置的所有针对SharePoint的权限的令牌,不用单独指定具体权限名称。

3. 检查Azure AD应用注册的权限配置

登录Azure门户找到你的应用注册,重点检查这两点:

  • API权限:确保添加的是SharePoint的权限(不是Microsoft Graph的),比如选择“SharePoint”后,添加委托权限或应用权限的Sites.FullControl.All,并且已经点击“授予管理员同意”(应用权限必须要管理员同意,委托权限如果是用户交互式登录的话可以由用户自己授权,但为了避免问题建议先完成管理员同意)。
  • Android平台配置:确认重定向URI的格式正确,应该是msauth://<你的应用包名>/<签名哈希>,这个你之前的工作版本应该已经配置正确,但可以再核对下。

4. 验证修改后的令牌

重新运行APP获取令牌,再次用jwt.ms解析,确认aud字段已经变成你的SharePoint租户地址,这时候再调用SharePoint API就不会再报受众验证失败的错误了。

另外补充一点:如果你的需求是调用特定SharePoint站点的API,租户级的令牌完全可以正常使用,不需要额外针对单个站点调整资源配置,除非你的场景有特殊的权限隔离要求。

备注:内容来源于stack exchange,提问作者roberth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:14:08