Outlook Web Add-in SSO令牌获取及Graph调用401错误排查
问题排查与解决方法
一、错误13006(获取SSO令牌失败)的排查点
清单文件
WebApplicationInfo配置校验Id必须严格匹配Azure AD应用注册的客户端ID,不能有拼写错误Resource格式必须是api://{你的域名/localhost端口}/{客户端ID},确认localhost端口和你Web项目实际运行的端口完全一致- 若要调用Graph,
Scopes里必须添加对应权限范围,比如调用/me需要User.Read,当前清单里的Files.Read不满足需求,先补上<Scope>User.Read</Scope>
Azure AD应用注册配置检查
- 进入应用注册的「API权限」页面,添加Microsoft Graph的委托权限(如
User.Read),并完成管理员同意(租户内应用必须操作这一步) - 确认「重定向URI」已添加加载项的回调地址,格式为
https://{你的域名/localhost端口}/auth-callback(对应ASP.NET项目的OAuth回调路径) - 检查「暴露API」部分,是否已添加
api://localhost:44355/{客户端ID}这个标识符,且加载项需要的权限范围已正确暴露
- 进入应用注册的「API权限」页面,添加Microsoft Graph的委托权限(如
环境与账号验证
- 必须使用Office 365工作/学校账号,本地Exchange服务器账号若未启用Modern Authentication,会导致SSO失败,需确认Exchange已开启Modern Auth
二、调用Graph /me返回401的解决方法
修正令牌受众
默认通过OfficeRuntime.auth.getAccessToken()获取的令牌,受众是加载项自身API,而非Microsoft Graph。需在调用时指定Graph资源,修改代码如下:const accessToken = await OfficeRuntime.auth.getAccessToken({ allowSignInPrompt: true, resource: "https://graph.microsoft.com" }) const me = await axios.get(`https://graph.microsoft.com/v1.0/me`, { headers: { Authorization: `Bearer ${accessToken}`, 'Content-Type': 'application/json', }, })权限配置补全
- 清单文件的
Scopes必须包含User.Read权限 - Azure AD应用注册里必须添加
User.Read委托权限并完成管理员同意,否则令牌会缺少权限声明,被Graph拒绝
- 清单文件的
令牌有效性验证(可选)
用jwt.ms解码获取到的令牌,检查aud字段是否为https://graph.microsoft.com,scp字段是否包含User.Read,不匹配则说明资源或权限配置有误
三、.NET Framework 4.8项目额外注意事项
- 确保ASP.NET项目的
Global.asax或Startup.cs已正确配置Azure AD OAuth2中间件,匹配应用注册的客户端ID和密钥 - 校验项目SSL配置,运行端口必须和清单
Resource里的端口一致,且证书需可信(可使用IIS Express自签名证书或导入可信证书) - 若通过后端代理调用Graph,后端需使用On-Behalf-Of流程获取Graph令牌,不能直接复用前端拿到的令牌
内容的提问来源于stack exchange,提问作者ape
相关产品推荐
相关产品推荐

