当您使用 Cloudflare Access 保护站点时,Cloudflare 会检查发往该站点的每个 HTTP 请求,以确保该请求包含有效的 CF_Authorization cookie。如果请求不包含该 cookie,Access 将阻止该请求。
CF_Authorization cookie 包含用户身份,采用 JSON Web Token (JWT) ↗ 的形式。Cloudflare 通过 Cloudflare Access 与配置的身份提供商之间的 OAuth 或 SAML 集成来安全地创建这些令牌。
Access 根据域生成两个独立的 CF_Authorization 令牌:
全局会话令牌:在用户登录 Access 时生成。此令牌作为 cookie 存储在您的 团队域(例如,
https://<your-team-name>.cloudflareaccess.com),并避免用户需要登录每个应用程序。-
应用程序令牌:为用户访问的每个应用程序生成。此令牌作为 cookie 存储在受保护的域(例如,
https://jira.site.com)上,并可用于在您的源站上验证请求。
Cloudflare Access 允许您在单个自托管应用程序中保护和管理多个域。在用户成功对一个域进行身份验证后,当他们访问同一 Access 应用程序中的另一个域时,Access 会自动签发 CF_Authorization cookie。这意味着用户只需对多域名应用程序进行一次身份验证。
对于包含五个或更少域的 Access 应用程序,当用户首次进行身份验证时,Access 会通过一系列重定向预先为所有域设置 cookie。这允许单页面应用程序 (SPA) 从其他子域检索数据,而无需用户单独访问每个子域。通配符子域(例如 *.example.com)无法接收预先设置的 cookie,因为 Access 不知道重定向到哪个具体子域。支持通配符路径。
对于包含五个以上域的 Access 应用程序,Access 不会预先设置 cookie。相反,会在用户访问每个域时签发 cookie。这避免了在身份验证期间通过大量域进行重定向而导致的延迟。
以下 Access cookie 对 Access 功能至关重要。标记为必需的 cookie 无法选择退出。以下 cookie 不用于跟踪或分析。
| 详细信息 | 过期时间 | HttpOnly | SameSite | 是否必需? |
|---|---|---|---|---|
在 cloudflareaccess.com 团队域上设置的 JSON Web Token (JWT),包含用户的身份并允许 Access 执行单点登录 (SSO) |
是 | None | 是 |
| 详细信息 | 过期时间 | HttpOnly | SameSite | 是否必需? |
|---|---|---|---|---|
| 在受 Access 保护的域上设置的 JSON Web Token (JWT),允许 Access 确认用户已通过身份验证且被授权访问源站 | 管理员选择(默认:None) | 管理员选择(默认:None) | 是 |
| 详细信息 | 过期时间 | HttpOnly | SameSite | 是否必需? |
|---|---|---|---|---|
| 请参阅绑定(binding)cookie | 是 | None | 否 |
| 详细信息 | 过期时间 | HttpOnly | SameSite | 是否必需? |
|---|---|---|---|---|
| 在每个应用程序域上使用的 CSRF ↗ 令牌,范围限于 Access 后面的单个应用程序 | 24 小时 | 是 | None | 是 |
| 详细信息 | 过期时间 | HttpOnly | SameSite | 是否必需? |
|---|---|---|---|---|
在 cloudflareaccess.com 团队域上设置的 Cookie,用于防止滥用一次性 PIN 码和多因素身份验证流程 |
30 天 | 是 | Strict | 是 |
Cloudflare Access 提供了可选的安全设置,这些设置可以添加到 Access 为已通过身份验证的用户生成的浏览器 cookie 中。
若要启用这些设置:
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)。
-
找到您要配置的应用程序并选择 Configure(配置)。
-
选择 **Advanced settings(高级设置)**并向下滚动到 Cookie settings(Cookie 设置)。
-
配置所需的 cookie 设置。
-
选择 Save(保存)。
SameSite ↗ 属性选择器限制了仅当 cookie 定义的站点与浏览器中请求的站点匹配时才发送 cookie。这增加了针对跨站请求伪造 (CSRF) ↗ 的防护。
选择器选项包括:
- None - Cookies 将在所有上下文中发送,包括跨源请求。
- Lax - 允许在顶级导航中发送 Cookie,并将与第三方网站发起的 GET 请求一起发送。
- Strict - Cookies 仅在第一方上下文中发送,不会与第三方网站发起的请求一起发送。
有关详细信息,请参阅 Mozilla 文档 ↗。
如果您有其他站点或应用程序依赖于特定应用程序的授权 cookie,请不要启用 SameSite 限制。
HttpOnly 标志是一个 cookie 属性,可防止任何客户端脚本访问该 cookie,从而降低跨站脚本 (XSS) 攻击的可能性。此标志默认启用。
在以下情况下,请不要启用 HttpOnly:
- 您正在将 Access 应用程序用于非基于浏览器的工具(例如 SSH 或 RDP)。
- 您拥有的软件依赖于能够访问 Access 生成的用户 cookie。
绑定 cookie(CF_Binding)是在用户成功进行身份验证时签发的可选 cookie。绑定 cookie 由用户的浏览器发送,并与特定应用程序的 CF_Authorization cookie 绑定。此 cookie 会在 Cloudflare 的网络中被剥离,绝不会转发到源站服务器。
CF_Authorization cookie 在没有关联绑定 cookie 的情况下无法使用,这可以防止攻击者重用被盗的 CF_Authorization cookie。如果请求到达 Cloudflare 网络时包含有效的 CF_Authorization cookie 但没有预期的绑定 cookie,Cloudflare 将拒绝该请求。
在以下情况下,请不要启用绑定 Cookie:
- 您正在将 Access 应用程序用于非基于浏览器的工具(例如 SSH 或 RDP)。
- 您在应用程序域上启用了不兼容的 Cloudflare 产品,例如 Zaraz 或 Google 标签网关 (Google tag gateway)。在启用这些产品的同时启用绑定 Cookie 可能会导致身份验证重定向循环 (
ERR_TOO_MANY_REDIRECTS)。 - 您已为应用程序开启了使用 Cloudflare One 客户端进行身份验证。
Cookie 路径属性将应用程序的路径 URL 添加到 CF_Authorization cookie 中。启用后,登录 example.com/path1 的用户必须重新进行身份验证才能访问 example.com/path2。禁用后,CF_Authorization cookie 的范围仅限于域和子域。
默认情况下,某些浏览器在无痕/隐私浏览模式下会阻止所有第三方 cookie,包括 CF_Authorization cookie。为了让 XHR 请求在隐私窗口中正常工作,您需要将您的应用程序和团队域排除在浏览器的跟踪保护系统之外。
若要为 Access 应用程序启用第三方 cookie:
Chrome
- 转到 Settings(设置)> Privacy and security(隐私和安全)> Cookies and other site data(Cookie 及其他网站数据)。
- 在 **Sites that can always use cookies(始终允许使用 Cookie 的网站)**下,添加以下 URL:
- 您的 Access 应用程序的主机名(例如
https://jira.site.com) https://<your-team-name>.cloudflareaccess.com
- 您的 Access 应用程序的主机名(例如
Safari
- 转到 Safari > Settings(设置)> Privacy(隐私)。
- 取消选中 Block all cookies(阻止所有 Cookie)。
Firefox
- 转到 Settings(设置)> Privacy & Security(隐私与安全)。
- 向下滚动到 Cookies and Site Data(Cookie 和网站数据)。
- 选择 Manage Exceptions...(管理例外...)。
- 输入您的 Access 应用程序的 URL(例如
https://jira.site.com)并选择 Allow(允许)。 - 输入
https://<your-team-name>.cloudflareaccess.com并选择 Allow(允许)。 - 选择 Save Changes(保存更改)。
Brave
- 转到
brave://settings/cookies。 - 在 **Sites that can always use cookies(始终允许使用 Cookie 的网站)**下,添加以下 URL:
- 您的 Access 应用程序的主机名(例如
https://jira.site.com) https://<your-team-name>.cloudflareaccess.com
- 您的 Access 应用程序的主机名(例如