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

Word加载项:“代表用户”流程中签名无效问题求助

排查Word加载项OBO流程MSAL异常的实用步骤

我之前在做Office加载项的OBO(代表用户)流程时也踩过类似的坑,结合你的场景,给你几个关键的排查方向:

  • 先确认加载项获取的令牌是否符合OBO要求
    把auth.getAccessTokenAsync拿到的令牌放到JWT解析工具里拆解,重点看两个核心字段:

    • aud:必须是https://graph.microsoft.com(或者你要访问的目标资源ID),Office默认返回的令牌可能是针对Office自身资源的,所以调用getAccessTokenAsync时一定要指定resource: "https://graph.microsoft.com"参数。
    • sub/oid:这两个用户标识字段必须存在,OBO流程完全依赖它们来代表用户发起后续请求。
  • 检查MSAL的OBO配置细节
    不管你用的是MSAL.NET还是MSAL.js,这几个配置点不能错:

    • 你的后端API(也就是用来做OBO的服务)必须在Azure AD里配置委派权限,并且添加了需要的Microsoft Graph权限(比如User.Read),如果是企业级应用,还要确保完成了管理员同意。
    • 初始化MSAL客户端时,要用后端API的客户端ID、租户ID和密钥/证书,而不是Word加载项的客户端ID——OBO是后端服务代表用户向Azure AD请求令牌,加载项的令牌只是一个“身份断言”。
    • 调用AcquireTokenOnBehalfOf(.NET)或acquireTokenOnBehalfOf(JS)时,要传入正确的UserAssertion(也就是加载项传来的令牌),同时指定准确的Graph权限范围(比如["https://graph.microsoft.com/User.Read"])。
  • 揪出MSAL异常的具体原因
    别只说“出现异常”,一定要捕获并查看异常的错误代码和消息,常见的坑包括:

    • invalid_grant:大概率是令牌过期、受众不匹配,或者后端API没有被授权代表用户请求。
    • insufficient privileges:后端API的权限配置不足,或者没完成管理员同意。
    • invalid_request:MSAL参数传错了,比如用户断言格式不对、权限范围拼写错误。
  • 试试用成熟的库简化流程
    如果是ASP.NET Core后端,直接用Microsoft.Identity.Web来处理OBO流程会省心很多——它会自动验证加载项传来的令牌、处理OBO请求和令牌刷新,比手动写MSAL代码少踩很多坑。

给你贴个MSAL.NET的OBO调用示例参考:

var confidentialClient = ConfidentialClientApplicationBuilder
    .Create("你的后端API客户端ID")
    .WithClientSecret("你的后端API客户端密钥")
    .WithTenantId("你的租户ID")
    .Build();

var userAssertion = new UserAssertion(加载项传来的访问令牌);
var result = await confidentialClient.AcquireTokenOnBehalfOf(
    new[] { "https://graph.microsoft.com/User.Read" },
    userAssertion)
    .ExecuteAsync();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:18:20