如何在Office加载项中安全持久化OAuth2访问令牌
Office加载项自定义OAuth:令牌传递与存储方案
一、无Cookie重定向的令牌安全传递方案
直接利用Office对话框的消息通信机制即可实现,流程如下:
- 后端生成令牌后,重定向到你加载项域名下的静态回调页面,将令牌作为URL参数传入(仅做中转,后续立即清理)
- 回调页面加载完成后,调用
Office.context.ui.messageParent()把令牌发送给加载项主页面 - 主页面在调用
displayDialogAsync时,通过监听dialogMessageReceived事件接收令牌,收到后先验证令牌签名,确认有效再处理 - 最后调用
dialog.close()关闭对话框
这种方式完全规避了跨域Cookie无法读取的问题,因为对话框和主页面同域,且Office框架的消息传递是经过安全校验的。另外也可以让后端直接返回包含令牌的JSON响应给对话框内的页面,再通过messageParent传递,前提是这个页面必须是你完全可控的,防止XSS风险。
二、适配桌面与Web客户端的令牌安全存储
推荐两种靠谱方案:
- 加密后的
localStorage:Office加载项的localStorage是沙箱隔离的,仅当前加载项可访问,比普通网页的localStorage安全度更高。存储前必须用AES等算法对令牌加密,密钥可以通过后端接口动态获取(别硬编码在前端代码里)或者由用户信息派生,绝对不能明文存储。 - 自定义加密存储模块:封装一套结合加密算法的存储逻辑,基于
localStorage实现。桌面端的加载项localStorage数据会存在本地沙箱目录,和浏览器的localStorage完全隔离;Web端则遵循同源策略,只有你的加载项能访问。
注意:别用sessionStorage,会话结束就丢数据;也绝对不能用Settings对象,官方明确不推荐做敏感数据存储。
内容的提问来源于stack exchange,提问作者Niko Mendo
相关产品推荐
相关产品推荐

