如何在Excel Add-in ASP.NET Core项目中获取自定义API访问令牌?
解决Office Add-in SSO获取Azure后端API令牌的问题
检查Azure AD应用配置
- 确认Office Add-in应用已获取目标API权限:在Azure门户找到你的Office Add-in注册应用,进入「API权限」页面,添加目标Azure API的委托权限(SSO基于用户身份,需选委托类型),且必须完成管理员同意(租户级权限需此操作)。
- 验证API范围格式准确性:你使用的
api://zzzzz/c6c1f32b-5e55-4997-881a-753cc1d563b7需满足两个条件:zzzzz必须与目标API应用的「应用ID URI」完全一致;- 后缀的
c6c1f32b-5e55-4997-881a-753cc1d563b7要和API应用「公开API」中配置的自定义范围名称完全匹配(含大小写)。
调整getAccessToken调用逻辑
- 明确请求参数:调用时需指定正确的参数,确保请求目标API的范围,示例代码如下:
Office.auth.getAccessToken({ allowSignInPrompt: true, allowConsentPrompt: true, forMSGraphAccess: false, // 非Graph API需设为false scopes: ["api://zzzzz/c6c1f32b-5e55-4997-881a-753cc1d563b7"] }).then(token => { // 使用令牌调用后端API }).catch(err => { console.error(err); }); - 开启授权提示:若用户未授权过该API范围,需将
allowConsentPrompt设为true,触发Office弹出授权窗口完成用户同意。
验证后端API的令牌验证逻辑
- 核对受众(Audience)设置:目标API的验证逻辑需接受Office Add-in应用的客户端ID,或确保令牌的
aud声明与API的应用ID URI(即api://zzzzz)匹配。 - 检查令牌范围声明:拿到令牌后用jwt.ms解码,查看
scp声明中是否包含你请求的自定义范围,若缺失则说明权限配置存在问题。
适配示例项目的默认配置
- 替换默认权限配置:Office-Add-in-ASPNET-SSO示例默认针对Graph API,需修改Web.config或appsettings.json中的相关配置,将
GraphScopes替换为你的自定义API范围。 - 检查后端OBO流程配置:若示例通过On-Behalf-Of流程获取令牌,需确保后端应用已被授予目标API的权限,且OBO流程调用时请求的是正确的自定义范围。
内容的提问来源于stack exchange,提问作者Pete44
相关产品推荐
相关产品推荐

