用户会话决定了用户在无需重新进行身份验证的情况下可以访问 Access 应用程序的时长。
当用户登录受 Access 保护的应用程序时,Access 会根据您的 Access 策略验证其身份,并生成两个已签名的 JSON Web Token (JWT):
| 令牌 | 描述 | 过期时间 | 存储方式 |
|---|---|---|---|
| 全局会话令牌 | 存储来自 IdP 的用户身份,并为所有 Access 应用程序提供单点登录 (SSO) 功能。 | 全局会话时长 | 您的 Cloudflare 团队域 (team domain) |
| 应用程序令牌 | 允许用户访问特定的 Access 应用程序。 | 策略会话时长,默认等于应用程序会话时长 | 受 Access 应用程序保护的主机名 |
在应用程序令牌生命周期的整个持续时间内,用户都可以访问该应用程序。当应用程序令牌过期时,如果全局令牌仍然有效(且用户的身份仍然符合您的 Access 策略),Cloudflare 将自动签发一个新的应用程序令牌。如果全局令牌也已过期,系统将提示用户向 IdP 重新进行身份验证。
全局令牌的过期时间通常设置为等于或大于应用程序令牌的过期时间。设置较长的全局令牌能够提供一种更安全的方式来允许更长的用户会话,因为全局令牌不能用于直接访问应用程序。
简而言之,Access 会按从最具体到最不具体的顺序检查会话:
- 客户端会话(如果启用)—— 覆盖所有其他时长。当此会话过期时,用户将重新进行身份验证。
- 策略会话 —— 控制匹配特定策略的用户对特定应用程序的访问。
- 应用程序会话 —— 应用程序中所有策略的默认策略会话时长。
- 全局会话 —— 控制用户在所有应用程序中登录 IdP 的频率。
有关直观表示,请参阅执行顺序流程图。
全局会话时长决定了 Cloudflare Access 提示用户登录其身份提供商的频率。您可以将全局会话时长设置在 15 分钟到一个月的范围内。默认值为 24 小时。
若要设置全局会话时长:
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)。
- 在 **Set your global session duration(设置全局会话时长)**下,选择 Edit(编辑),
- 从下拉菜单中选择所需的超时时长。
- 选择 Save(保存)。
在此时间段过后,用户将被要求向 IdP 重新进行身份验证。
策略会话时长决定了用户可以访问自托管 Access 应用程序的时长。当用户的会话过期时,Access 会根据该应用程序的 Access 策略重新检查其存储的用户身份。
默认情况下,策略会话时长等于应用程序会话时长。若要为特定用户配置更细粒度的权限,您可以将策略会话时长更改为从“立即超时”到“一个月”不等的值。例如,您可能希望将工程师的应用程序会话时长设置为 7 天,但将承包商的策略会话时长设置为 24 小时。
若要设置策略会话时长:
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Policies(策略)。
- 选择一项策略并选择 Configure(配置)。
- 从下拉菜单中选择 Session Duration(会话时长)。
- 保存策略。
匹配该策略的用户将被签发具有此过期时间的应用程序令牌。
应用程序会话时长是 Access 应用程序中所有策略的默认策略会话时长。可用的会话时长范围从“立即超时”到“一个月”不等。默认值为 24 小时。
若要设置应用程序会话时长:
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)。
- 选择一个应用程序并选择 Configure(配置)。
- 从下拉菜单中选择 Session Duration(会话时长)。
- 保存应用程序。
匹配配置了 **Same as application session timeout(与应用程序会话超时相同)**时长的策略的用户将被签发具有此过期时间的应用程序令牌。
Application session durations 只控制进入 SaaS 应用程序的入口;Access 无法控制用户在 SaaS 应用程序内的停留时长。例如,如果用户退出 SaaS 应用程序后再次访问,有效的 Access application token 允许他们重新进行身份验证,而无需再次登录。SaaS 应用程序会颁发自己的授权 Cookie 来管理用户在应用程序内的会话。
Cloudflare 不控制活跃 SSH、VNC 或 RDP 会话的持续时间。应用程序会话持续时间决定用户可以发起新连接或刷新现有连接的时间窗口。
当为 Access 应用程序启用使用 Cloudflare One Client 进行身份验证时,Cloudflare One 客户端会话时长优先于所有其他会话时长(应用程序、策略和全局)。只要 Cloudflare One 客户端会话有效且用户正在运行 Cloudflare One 客户端,即使全局会话已过期,用户也不会被提示向 IdP 重新进行身份验证。
如果您使用独立多因素身份验证(MFA),MFA 会话时长决定了用户在无需提示进行 MFA 的情况下可以登录 Cloudflare Access 的时长。MFA 会话独立于全局、策略和应用程序会话时长。当登录启用了 MFA 的 Access 应用程序时,如果用户上一次 MFA 身份验证超出了配置的会话时长,则他们必须完成 MFA 质询。在向其身份提供商进行身份验证后,系统会提示用户进行 MFA。CF_Device cookie 确保这两个身份验证步骤在同一台设备上进行。MFA 会话时长不会影响用户访问应用程序的时长(该时长由应用程序令牌控制)。
以下流程图说明了 Access 如何对自托管应用程序强制执行用户会话。
flowchart TB
%% Accessibility
accTitle: Access session durations
accDescr: Flowchart describing the order of enforcement for Access sessions
%% In with user traffic
start["用户访问 Access 应用程序"]
start--"已启用“使用 Cloudflare One Client 进行身份验证”" -->warpsession[设备客户端会话已过期?]
start-- "已禁用“使用 Cloudflare One Client 进行身份验证”" --> policysession[策略会话已过期?]
warpsession--"Yes"-->idp[提示登录 IdP]
warpsession--"No"-->accessgranted[已授予访问权限]
policysession--"Yes"-->globalsession[全局会话已过期?]
policysession--"No"-->accessgranted
globalsession--"Yes"-->idp
globalsession--"No"-->refreshtoken[根据 Access 策略检查身份]
refreshtoken-->accessgranted
idp-->refreshtoken
Access 提供了两种撤销用户会话的选项:按应用程序和按用户。
若要立即终止特定应用程序的所有活动会话:
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)。
-
找到您想要撤销其活动会话的应用程序,然后选择 Configure(配置)。
-
选择 Revoke existing tokens(撤销现有令牌)。
除非策略中的规则发生了变化,否则如果用户在您的身份提供商中的个人资料仍处于活动状态,他们可以开始一个新的会话。
Access 可以立即撤销您账户中所有应用程序的单个用户会话。但是,如果用户的身份配置文件仍处于活动状态,他们可以生成新的会话。
如果您想永久撤销用户的访问权限:
-
在您的身份提供商中禁用其账户,以便他们无法进行身份验证。
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Team & Resources(团队与资源)> Users(用户)。
-
选中要撤销其会话的用户旁边的复选框。
-
选择 Actions(操作)> Revoke(撤销)。
该用户将无法再登录受 Access 保护的任何应用程序。在您从账户中移除该用户之前,该用户仍将计入您的席位订阅数。
当管理员撤销用户的 Cloudflare Access 令牌时,该用户在最多 1 分钟内将无法再次登录。如果他们尝试这样做,Cloudflare Access 将显示错误。
要从 Access 注销,最终用户可以访问以下任一 URL:
<your-application-domain>/cdn-cgi/access/logout<your-team-name>.cloudflareaccess.com/cdn-cgi/access/logout
此操作将撤销该用户在所有应用程序中的会话。Access 将立即清除用户浏览器中的授权 cookie,并且在 20-30 秒内将停止接受所有先前签发的令牌。这两个 URL 之间的唯一区别是分别从哪个域删除授权 cookie。例如,访问 <your-application-domain>/cdn-cgi/access/logout 将删除应用程序 cookie,从而使注销操作感觉更为即时。
您可以使用这些 URL 直接在您的应用程序中创建自定义注销按钮或链接。
严重依赖 AJAX 的页面或单页面应用程序可能会因为 Access 令牌过期而阻止子请求,而不会提示用户重新进行身份验证。
您可以配置 Access 在包含过期会话令牌的子请求上提供 401 响应。我们建议使用此响应代码来强制刷新页面,或向用户显示其会话已过期的消息。
为了针对过期的会话接收 401 响应,请在所有 AJAX 请求中添加以下标头:
X-Requested-With: XMLHttpRequest