VS2022中Office邮件插件添加WebApplicationInfo后调试报错
Office插件SSO配置问题排查与修复
问题描述
使用VS 2022开发Office插件并实现SSO功能时,添加以下<VersionOverrides>配置段后,调试弹出错误提示但输出窗口无报错信息,移除该配置后插件可正常构建调试:
<VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides/1.1" xsi:type="VersionOverridesV1_1"> <WebApplicationInfo> <Id>guid</Id> <Resource>api://localhost:3000//guid</Resource> <Scopes> <Scope>Files.Read</Scope> <Scope>profile</Scope> <Scope>openid</Scope> </Scopes> </WebApplicationInfo> <VersionOverrides>
同时,调用以下代码获取AccessToken时返回错误:"The identity API is not supported for this add-in."
async function getUserData() { try { let userTokenEncoded = await OfficeRuntime.auth.getAccessToken(); let userToken = jwt_decode(userTokenEncoded); // 使用jwt-decode库 console.log(userToken.name); // 用户名 console.log(userToken.preferred_username); // 邮箱 console.log(userToken.oid); // 用户ID } catch (exception) { console.log(exception); if (exception.code === 13003) { popup.showNotification("test"); } if (exception.code === 13000) { popup.showNotification(exception.message); } else { popup.showNotification("test"); } } }
需补充/修正的配置项
1. 修复XML语法错误
配置末尾的<VersionOverrides>未闭合,需改为</VersionOverrides>;同时Resource字段中的双斜杠//要改为单斜杠/(无效URI格式会导致SSO验证失败)。修正后的完整配置:
<VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides/1.1" xsi:type="VersionOverridesV1_1"> <WebApplicationInfo> <Id>你的Azure应用注册ID</Id> <Resource>api://localhost:3000/你的Azure应用注册ID</Resource> <Scopes> <Scope>Files.Read</Scope> <Scope>profile</Scope> <Scope>openid</Scope> </Scopes> </WebApplicationInfo> </VersionOverrides>
2. 确保VersionOverrides层级正确
VersionOverrides必须嵌套在<OfficeApp>根节点下,层级不能出错,示例完整结构:
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp"> <!-- 基础配置:Id、Version、ProviderName、DefaultLocale等 --> <VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides/1.1" xsi:type="VersionOverridesV1_1"> <WebApplicationInfo> <!-- 你的WebApplicationInfo配置 --> </WebApplicationInfo> <!-- 其他Overrides配置,如Hosts、Requirements等 --> </VersionOverrides> </OfficeApp>
3. 声明SSO权限要求
在VersionOverrides下添加Requirements节点,明确声明对IdentityAPI的版本要求,确保Office客户端识别SSO功能:
<VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides/1.1" xsi:type="VersionOverridesV1_1"> <Requirements> <Sets DefaultMinVersion="1.1"> <Set Name="IdentityAPI" MinVersion="1.3"/> </Sets> </Requirements> <WebApplicationInfo> <!-- 你的WebApplicationInfo配置 --> </WebApplicationInfo> </VersionOverrides>
IdentityAPI的最低版本需设为1.3,才能支持OfficeRuntime.auth.getAccessToken()调用。
4. 验证Azure应用注册配置
- 重定向URI必须设置为
api://localhost:3000/你的Azure应用注册ID,与清单Resource字段完全一致; - 确认已添加Delegated权限(Files.Read、profile、openid),且工作/教育账户已完成管理员同意;
- 应用ID URI需设置为
api://localhost:3000/你的Azure应用注册ID,与清单Resource匹配。
5. 确认Office客户端版本支持
SSO功能要求:
- Windows版Office:2016及以上并更新至最新补丁;
- Mac版Office:16.19及以上;
- 网页版Office:使用Chrome、Edge、Firefox等现代浏览器。
代码优化建议
调用getAccessToken()前需确保Office.js完全加载,建议在Office.initialize回调后执行SSO逻辑:
Office.initialize = function(reason) { getUserData(); };
内容的提问来源于stack exchange,提问作者cashmere
相关产品推荐
相关产品推荐

