如果 Office 外接程序需要第三方 Cookie,则加载加载项的 运行时 使用智能跟踪防护 (ITP) 时,将阻止这些 Cookie。 你可能使用第三方 Cookie 对用户进行身份验证,或者用于其他方案,例如存储设置。
如果 Office 加载项和网站必须依赖第三方 Cookie,请使用以下步骤来使用 ITP。
- 设置 OAuth 2.0 授权 ,以便身份验证域 (,即需要 cookie 的第三方) 将授权令牌转发到您的网站。 使用令牌使用服务器设置的 Secure 和 HttpOnly Cookie 建立第一方会话。
- 使用 存储访问 API ,以便第三方可以请求访问其第一方 Cookie 的权限。 当前版本的 Office on Mac 和 Office web 版 都支持此 API。
注意
如果出于身份验证以外的目的使用 Cookie,请考虑将 用于
localStorage
你的方案。但请注意,从基于 Chromium 的浏览器(例如 Chrome 和 Edge)的版本 115 开始,存储分区将启用,以防止特定的侧通道跨站点跟踪 (另请参阅Microsoft Edge 浏览器策略) 。 这意味着,存储 API 存储的数据(例如本地存储)仅适用于具有相同源和相同顶级站点的上下文。
以下代码示例演示如何使用存储访问 API。
function displayLoginButton() {
const button = createLoginButton();
button.addEventListener("click", function(ev) {
document.requestStorageAccess().then(function() {
authenticateWithCookies();
}).catch(function() {
// User must have previously interacted with this domain loaded in a top frame.
// Also you should have previously written a cookie when domain was loaded in the top frame.
console.error("User cancelled or requirements were not met.");
});
});
}
if (document.hasStorageAccess) {
document.hasStorageAccess().then(function(hasStorageAccess) {
if (!hasStorageAccess) {
displayLoginButton();
} else {
authenticateWithCookies();
}
});
} else {
authenticateWithCookies();
}
关于 ITP 和第三方 Cookie
第三方 Cookie 是在 iframe 中加载的 Cookie,其中域不同于顶级帧。 ITP 可能会影响复杂的身份验证方案,其中弹出对话框用于输入凭据,然后外接程序 iframe 需要 Cookie 访问才能完成身份验证流。 ITP 还可能会影响无提示身份验证方案,其中你以前曾使用弹出对话框进行身份验证,但随后使用外接程序会尝试通过隐藏的 iframe 进行身份验证。
在 Mac 上开发 Office 加载项时,MacOS Big Sur SDK 会阻止访问第三方 Cookie。 这是因为 WKWebView ITP 在 Safari 浏览器上默认启用,WKWebView 会阻止所有第三方 Cookie。 Office on Mac 版本 16.44 (20121301) 或更高版本与 MacOS Big Sur SDK 集成。
在 Safari 浏览器中,最终用户可以切换“首选项>隐私”下的“阻止跨站点跟踪”复选框以关闭 ITP。 但是,无法为嵌入式 WKWebView 控件关闭 ITP。
Google Chrome 第三方 Cookie 支持
Google Chrome 正在努力为用户提供对其浏览体验的更多控制。 用户将能够在其 Chrome 浏览器中阻止第三方 Cookie。 这将阻止加载项使用任何此类 Cookie。 当加载项对用户进行身份验证时,这可能会导致问题,例如多个登录请求或错误。
有关改进的身份验证体验,请参阅 使用设备状态在浏览器上使用已阻止的第三方 Cookie 改善 SSO 体验。
有关 Google Chrome 推出的详细信息,请参阅 Web 上的隐私沙盒的新路径。