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

Outlook 外接程序中存储 access token 的合适位置是什么?

结论

你列出的方案中,Office.context.roamingSettings是唯一安全合规的可选存储方案,其余方案均存在适配问题或安全风险,具体分析如下:


各方案评估

1. Office.js 内置接口类

  • Office.context.document.settings.set()

    该接口存储的配置绑定到当前打开的文档/邮件项,仅当前文档可访问,无法全局存储用户级的token;如果是共享文档,token还会随着文件同步泄露给其他有权限访问文档的用户,完全不适用。
  • Office.context.roamingSettings ✅ 推荐

    这是微软官方为Office外接程序设计的用户级配置存储方案:
    • 数据和当前用户的微软账户绑定,仅当前用户、当前外接程序有权限读取
    • 存储内容经过微软服务器加密,支持跨设备漫游同步,不会随Outlook缓存清理、设备更换丢失
    • 不属于文档/邮件的元数据,不会随着文件共享泄露
      使用时注意,调用set()后需要执行saveAsync()才能完成持久化:
    const _settings = Office.context.roamingSettings
    _settings.set("access-token", "***");
    _settings.saveAsync((asyncResult) => {
      // 确认保存结果
    });
    
  • Office.context.mailbox.item.loadCustomPropertiesAsync()

    该接口存储的属性绑定到单个邮件项,仅打开对应邮件时才能读取,无法全局存储用户的通用token,完全不适用。

2. JavaScript 原生方法类

  • localStorage.setItem()

    明文存储在当前运行环境的本地缓存中,极易被恶意程序、XSS攻击窃取;且不同运行环境(桌面端Outlook、网页版Outlook、移动端Outlook)的localStorage完全隔离,无法跨端同步,清理缓存、重装软件后数据就会丢失,不符合安全合规要求。
  • document.cookie

    存在和localStorage相同的明文存储、易被窃取、易丢失、跨端不通的问题,同时Office外接程序的沙箱环境对cookie的生命周期限制极多,经常会被自动清理,不推荐使用。

补充注意事项

  • 存储refresh token时无需额外加密,roamingSettings的底层存储已经做了数据加密处理
  • 建议尽量缩短access token的有效时长,过期后及时调用refresh token换取新凭证,不要长期存储超期的token
  • 不要将任何敏感凭证存储在和文档、邮件绑定的属性中,避免随文件共享泄露

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 04:39:02