如何在Outlook加载项旁加载时读取清单中的客户自定义OAuth信息?
实现方案:读取Outlook加载项清单中的客户专属OAuth信息并共享
完全可以实现你的需求,核心思路是通过加载项清单嵌入自定义配置,结合Office.js API读取配置,再通过组织级存储实现用户共享访问,具体步骤如下:
在客户专属清单中嵌入OAuth配置
不管是XML还是JSON格式的加载项清单,都可以通过扩展节点添加客户专属的OAuth信息。以XML清单为例,可在<Resources>节点下添加自定义扩展属性:<Resources> <bt:Urls> <!-- 加载项原有资源URL --> </bt:Urls> <ExtendedProperties> <ExtendedProperty Name="ClientOAuthConfig" Value='{"ApplicationID":"CLIENT_A_APP_ID","TenantID":"CLIENT_A_TENANT_ID","Scope":"Mail.Read User.Read"}'/> </ExtendedProperties> </Resources>每个客户的清单中替换对应的值即可。
加载项启动时读取清单配置
使用Office.js提供的Office.context.mailbox.getManifestAsync方法获取完整清单内容,解析后提取自定义OAuth信息。示例代码:Office.initialize = function () { Office.context.mailbox.getManifestAsync(function(result) { if (result.status === Office.AsyncResultStatus.Succeeded) { const manifestXml = result.value; const parser = new DOMParser(); const xmlDoc = parser.parseFromString(manifestXml, "text/xml"); const oauthConfigNode = xmlDoc.querySelector('ExtendedProperty[Name="ClientOAuthConfig"]'); if (oauthConfigNode) { const oauthConfig = JSON.parse(oauthConfigNode.getAttribute('Value')); // 拿到客户专属的ApplicationID、TenantID、Scope const { ApplicationID, TenantID, Scope } = oauthConfig; // 后续处理存储或直接使用 } } else { console.error('读取清单失败:', result.error.message); } }); };存储配置供组织内用户共享
要让组织内所有用户都能访问该配置,需使用组织级存储方案:- 利用Microsoft Graph API:管理员旁加载后,加载项将配置写入Azure AD应用程序的组织级扩展属性,用户使用时通过Graph API读取该属性(需提前在清单中声明Graph相关权限并获得管理员同意)。
- 借助Azure存储:在你的Azure存储账户中为每个客户创建专属容器,管理员首次启动加载项时将配置写入容器,用户使用时加载项从对应容器读取(需配置Azure AD权限,确保仅该组织用户可访问)。
关键注意事项
- 清单中的OAuth信息需加密存储,避免明文暴露敏感数据。
- 确保加载项具备读取清单的权限(默认Outlook加载项已拥有该权限)。
- 使用Graph或Azure存储时,需提前在清单中声明对应权限,并引导客户管理员完成权限同意流程。
内容的提问来源于stack exchange,提问作者Suraj Sinha
相关产品推荐
相关产品推荐

