备注
全新改进的 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 调用来执行配置。
登录到要应用该设置的 Dynamics 365 组织。
打开浏览器控制台并运行以下脚本。 (如果尚未允许在控制台中粘贴脚本,可能需要运行允许粘贴)。
备注
如果没有配置 samesitemodeforsessioncookie,0 将被设置为默认值。 (目前 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。 | 建议使用基于令牌的身份验证。 或者,将设置配置为无。 |