如何通过Microsoft Office Word加载项对Web应用后端API进行身份验证?
Word加载项获取访问令牌关联Web应用账户的解决方案
正确的API调用方式
你之前尝试的几个API要么已废弃,要么是旧版本写法。当前Office加载项获取访问令牌的标准方法是使用OfficeRuntime.auth.getAccessToken(),这是替代旧Office.context.auth相关API的最新实现。
前端代码示例
async function fetchAccessTokenAndAssociate() { try { // 获取访问令牌,配置项根据需求调整 const accessToken = await OfficeRuntime.auth.getAccessToken({ allowSignInPrompt: true, // 未登录时弹出登录框 allowConsentPrompt: true, // 需要授权时弹出授权框 forMSGraphAccess: false // 不需要访问Graph API则设为false }); // 把令牌发送到后端做验证和账户关联 await sendTokenToBackend(accessToken); console.log("账户关联流程启动"); } catch (error) { // 错误分类处理 switch (error.code) { case 13001: console.error("用户未登录,请先登录Office账户"); break; case 13002: console.error("用户拒绝授权,无法获取令牌"); break; case 13006: console.error("服务内部错误,请稍后重试"); break; default: console.error("获取令牌失败:", error.message); } } } async function sendTokenToBackend(token) { try { const response = await fetch("/your-backend-auth-endpoint", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ accessToken: token }) }); const result = await response.json(); if (result.success) { console.log("Word用户与Web应用账户关联成功"); } else { console.error("关联失败:", result.msg); } } catch (err) { console.error("发送令牌到后端失败:", err); } }
后端验证逻辑
- 收到前端传来的令牌后,需要验证令牌的合法性:
- 验证签名是否有效(使用Microsoft公钥)
- 检查令牌的
exp字段确保未过期 - 确认
aud字段匹配你的Azure AD应用ID
- 从令牌的
oid(对象ID)或sub字段提取用户唯一标识 - 将该标识与你的Web应用用户系统关联(已有账户则绑定,无则创建新账户)
关键配置检查
- 确保你的加载项已在Azure AD完成注册,且配置了正确的重定向URI(需匹配加载项的域名)
- 加载项清单文件中需添加
Permissions节点,指定所需权限(如<Permissions>ReadWriteDocument</Permissions>),并在Azure AD中配置对应的API权限 - 确认加载项所在域名已加入Azure AD应用的CORS允许列表
内容的提问来源于stack exchange,提问作者Vishwanathan
相关产品推荐
相关产品推荐

