在 Dataverse 和 Dynamics 365 中为会话 cookie 配置 SameSite 属性

备注

全新改进的 Power Platform 管理中心现已进入公开预览阶段! 我们将新的管理中心设计为更易于使用,具有面向任务的导航功能,可帮助你更快地实现特定结果。 随着新的 Power Platform 管理中心进入正式发布阶段,我们将发布新的更新文档。

了解如何在 Microsoft Dataverse 和 Dynamics 365 中为会话 cookie (CrmOwinAuth) 配置 SameSite 属性。 此设置通过控制会话 Cookie 在跨站点方案中的共享方式来增强安全性。

SameSite cookie 设置可控制浏览器如何共享 Dataverse 和 Dynamics 365 中使用的会话 cookie (CrmOwinAuth)。 此 cookie 存储与会话管理相关的信息。

为什么使用 SameSite?

设置 Description 建议
宽松 Cookie 用于顶级导航(即链接单击)发送,但不在跨站点表单提交(如 POST、PUT、DELETE、PATCH)期间发送。 建议用于大多数方案。
None Cookie 始终会被发送。 此设置对于集成(例如在 iframe 或自定义集成中嵌入 Dynamics 365)可能是必需的。 这是默认设置。 此设置可用于集成,具体取决于跨站点请求。
严格 Cookie 绝不会与跨站点请求一起发送,即使是跨站点场景中的顶级导航也是如此。 此设置可用于高度敏感的环境。 它还会影响用户体验。

重要考虑因素

一个浏览器会话中有多个 Dynamics 365 实例(严重)

登录 Dynamics 365 环境时,浏览器会创建一个会话 cookie (CrmOwinAuth),用于记住您的登录信息。 此 Cookie 在同一父域(crm.dynamics.com)下的所有 Dynamics 365 环境中共享。

如果您在一个浏览器会话中登录多个 Dynamics 365 或 Power Platform 环境,例如生产环境和测试环境,则应用于第一个环境的 SameSite 安全设置会自动应用于同一浏览器会话中的其他环境。 这可能会导致在尚未显式设置 SameSite 配置的环境中出现意外行为。

  • 为每个环境使用单独的浏览器会话或浏览器配置文件。
  • 在不同的 Dynamics 365 环境之间切换时清除浏览器 cookie。
  • 如果需要调整或关闭跨环境设置,请咨询 Power Platform 管理中心管理员,我们不建议这样做。

更多注意事项

注意事项 解释 指南
针对跨站点攻击的安全性 将 SameSite 从设置为宽松严格可以防止 POST、PUT、DELETE 或 PATCH 等基于 cookie 的跨站请求,从而显著减少跨站请求伪造(CSRF)攻击。 建议使用宽松来提供保护,但不会对可用性产生重大影响。
严格设置用法 严格设置可提供最高安全性,但会阻止所有跨站交互,包括用户从涉及 cookie 的外部网站直接点击。 由于其严格的限制,建议用于高度机密的方案。
嵌入 Dynamics 365(iFrames)或自定义集成 使用 iframe 在外部网站中嵌入 Dynamics 365 可能需要将 SameSite 设置为宽松严格设置会导致嵌入问题。 嵌入式场景和集成请使用
与现代浏览器的一致性 现代浏览器的默认设置为宽松,可防止意外的跨站数据泄漏,且不会对可用性造成重大影响。 建议将宽松设置为平衡方法。

先决条件

在配置 SameSite 之前,请确保满足以下要求:

  • 您有一个可用于初始测试的非生产环境。
  • 您拥有 Power Platform 管理中心系统管理员角色,可以对 Dataverse 中的组织实体进行更改。

配置 SameSite 属性

目前,我们需要通过 API 调用来执行配置。

  1. 登录到要应用该设置的 Dynamics 365 组织。

  2. 打开浏览器控制台并运行以下脚本。 (如果尚未允许在控制台中粘贴脚本,可能需要运行允许粘贴)。

    备注

    如果没有配置 samesitemodeforsessioncookie0 将被设置为默认值。 (目前 0 被映射为)。

    您可以将 samesitemodeforsessioncookie 设置为 1,即;将 2 设置为宽松;将 3 设置为 严格,但不建议这样做。

    const orgId = "<dynamics-org-id>"; 
    
    const url = `/api/data/v9.0/organizations(${orgId})`; 
    
    fetch(url, { 
        method: "PATCH", 
        headers: { 
            "OData-MaxVersion": "4.0", 
            "OData-Version": "4.0", 
            "Accept": "application/json", 
            "Content-Type": "application/json; charset=utf-8", 
            "Prefer": "return=representation" 
        }, 
        body: JSON.stringify({ 
            samesitemodeforsessioncookie: 1 // 1:None, 2:Lax 
        }) 
    }) 
    .then(response => { 
        if (response.ok) { 
            return response.json(); 
        } else { 
            throw new Error("Error updating: " + response.statusText); 
        } 
    }) 
    .then(data => console.log(" Update successful:", data)) 
    .catch(error => console.error("Update failed:", error)); 
    

验证更新

要验证更新,请访问此 URL:<org-URL>/api/data/v9.0/organizations(<org-ID>)?$select=samesitemodeforsessioncookie

检查该值是否已更新。

注销并重新登录。 CRMOwinAuth cookie 的 SameSite 值应相应更新。

功能性测试

退出并重新登录 Dynamics 365。

检查关键集成和方案,尤其是 iframe 和跨站点交互。

故障排除

问题 原因 解决方案
Dynamics 365 页面无法在 iframe 中加载。 SameSite 设置为宽松严格 更改为
Cookie 设置在多个环境之间持续存在。 Cookie 在 .crm.dynamics.com 域中共享。 清除 Cookie 或使用单独的浏览器会话或配置文件。
集成失败(CSRF 错误)。 SameSite 设置为宽松严格会阻止必要的 cookie。 建议使用基于令牌的身份验证。 或者,将设置配置为