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

Office Word加载项SSO配置疑问:跨项目与同项目部署问题

解决Word加载项SSO跨独立项目(加载项+API)的配置问题

我之前也遇到过类似的跨项目SSO配置问题,官方示例的单域场景确实和实际多项目场景有差异,你之前把API的Auth代码移到加载项里的思路不太对——令牌验证的核心逻辑应该留在API项目,加载项只负责获取令牌并传递给API,同时要解决跨域访问的问题。下面是具体的调整方案:

1. 还原并调整API项目的SSO配置

把你之前移到加载项里的OpenIdConnectCachingSecurityTokenProvider、Startup.Auth以及验证相关代码还原到API项目中,这部分是API验证Office令牌的核心:

  • 确保Startup.Auth里正确配置了Azure AD的租户ID、API的客户端ID,以及令牌验证逻辑;
  • 在API的Startup.cs中添加CORS策略,允许加载项域名的跨域请求(必须开启凭证支持,因为SSO令牌需要在请求中携带):
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAddInOrigin",
            builder => builder.WithOrigins("https://your-addin-domain.com") // 替换成你的加载项域名
                              .AllowAnyHeader()
                              .AllowAnyMethod()
                              .AllowCredentials());
    });
    
  • 在Configure方法中启用CORS(要放在路由配置之前):
    app.UseCors("AllowAddInOrigin");
    

2. 调整加载项项目的配置

加载项项目不需要承担令牌验证的工作,只需要完成以下两点:

  • 确保加载项的manifest.xml中WebApplicationInfo配置正确:
    <WebApplicationInfo>
      <Id>你的加载项Azure AD应用ID</Id>
      <Resource>API的应用ID URI</Resource>
      <Scopes>
        <Scope>access_as_user</Scope>
      </Scopes>
    </WebApplicationInfo>
    
  • 在加载项的前端代码中,通过Office.js获取SSO令牌后,将令牌放在请求头的Authorization字段中传递给API:
    Office.auth.getAccessToken({ allowSignInPrompt: true })
      .then(token => {
        return fetch('https://your-api-domain.com/api/values', {
          method: 'GET',
          headers: {
            'Authorization': `Bearer ${token}`,
            'Content-Type': 'application/json'
          },
          credentials: 'include'
        });
      })
      .then(response => response.json())
      .then(data => {
        // 处理API返回的数据
      })
      .catch(err => {
        // 处理令牌获取或API请求错误
      });
    

3. 修正Azure AD应用注册配置

这一步很容易被忽略,直接影响SSO流程的正确性:

  • 在API的Azure AD应用注册中,进入暴露API页面,添加加载项的客户端ID作为授权的客户端应用,确保加载项有权限访问API;
  • 在加载项的Azure AD应用注册中,进入API权限页面,添加API的access_as_user权限并完成管理员同意;
  • 确保两个应用注册的重定向URI分别对应加载项和API的实际域名(加载项的重定向URI用于SSO回调,API的则用于令牌验证的回调)。

4. 常见问题排查

  • 如果API返回401未授权:检查API中令牌验证逻辑的受众(aud)是否匹配API的客户端ID,以及令牌是否过期;
  • 如果出现跨域错误:确认API的CORS策略是否包含加载项的完整域名(注意http/https的区别),并且开启了AllowCredentials;
  • 如果加载项无法获取令牌:检查manifest.xml的WebApplicationInfo配置是否正确,以及加载项的Azure AD应用是否已获得API的权限。

内容的提问来源于stack exchange,提问作者Gomtesh Hatgine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:36:04