第二十三章 CSP Session 管理 - 身份验证共享策略
本节介绍如何通过两种方式创建一组应用程序以作为一个组工作:
- 共享认证:如果应用程序不共享认证,用户必须分别登录到被另一个应用程序链接的每个应用程序。共享身份验证允许用户通过一次登录进入所有链接的应用程序。
- 共享数据:应用程序共享和协调全局状态信息。
本节介绍以下内容:
- 身份验证方法
- 认证架构
- 选择策略时的注意事项
身份验证方法
本节介绍以下身份验证方法。通过导航到系统管理 > 安全 > 应用程序 > Web 应用程序,可以在管理门户中找到实现它们的选项。
- 一次性共享
One-Time Sharing: Login Cookies
:登录Cookie
。具有相同id
的所有应用程序共享身份验证。这对应于CSP
应用程序选项登录Cookie
。 - 持续共享:按
ID
或会话进行身份验证组
- 按
Session
。这对应于两个CSP
应用程序选项。Session Cookie Path
选项使具有相同session-path-cookie
的应用程序共享一个会话及其身份验证。如果 CSPSHARE 选项设置为CSPSHARE=1
,则当用户单击(在源应用程序中)到目标应用程序的链接时,目标应用程序将与源应用程序置于同一会话中
一次性共享:登录 Cookie
登录 Cookie
保存有关最近登录用户的信息。如果让用户不必经常登录,但又希望应用程序保持独特且未连接,请使用登录 Cookie
。
对于登录 Cookie
,请将每个应用程序放在单独的会话中。然后仅在第一次进入应用程序时共享身份验证。登录 Cookie
应用程序不构成一个组。因此,登录后,一个应用程序中的身份验证更改不会影响其他应用程序。
当用户使用密码登录时,该身份验证将保存在 cookie
中。如果进入另一个启用了登录 Cookie
的应用程序(第一次),它将使用保存在 cookie
中的身份验证。如果用户跳转到未启用登录 Cookie
的第三个应用程序(第一次),用户必须输入用户名/密码。
在决定是否使用登录 Cookie
时,请注意以下几点:
- 每当用户使用密码登录时,登录
cookie
都会更新给新用户。 - 不会为未经身份验证的登录(作为
UnknownUser
)生成登录cookie
。 - 通过
API
调用登录时不会生成登录cookie
。 - 一旦该会话已通过身份验证,登录
cookie
会话就是独立的。因此,在一个会话中注销或超时不会影响其他会话。 - 来自
Login-Cookie
应用程序的身份验证不能与仅密码(非Login-Cookie
)应用程序共享。对于组中经过身份验证的应用程序,为了获得一致的行为,请使用登录Cookies
或全部使用登录Cookie
。
持续共享:按 ID
或按会话的身份验证组
通过组共享,组应用程序的身份验证作为一个单元移动。如果组中应用程序中的用户以新用户身份登录,则所有应用程序都将移至该用户。如果一个应用程序注销,它们都将被注销。
应用程序可以通过两种方式组合在一起:按会话和按 ID
。按会话组共享身份验证和数据。按 ID
组仅共享身份验证。
应用程序在 CSP
会话中运行。每个会话都有一个与之关联的安全上下文。
如果多个应用程序放置在同一个会话中,它们将共享身份验证。这称为按会话组(会话共享)。此外,会话可能包含用户定义的数据。应用程序可以通过使其应用程序 Cookie
路径完全匹配或在通过链接从一个应用程序跳转到另一个应用程序时使用 CSPSHARE=1
标志来共享会话。
可以通过分配与组标识符匹配的应用程序来对应用程序进行分组。这称为按 ID
组。该组共享一个安全上下文。这些应用程序通常在单独的会话中。该组不管理用户数据,仅管理身份验证。
按会话组(会话共享)
共享会话存在潜在问题。会话事件仅从原始 CSP
应用程序中获取。如果链接转到需要不同会话事件的页面,则这些会话事件不会运行。此外,在另一个具有不同安全上下文的 CSP
应用程序中运行页面可能需要登录;登录可能会改变原始 CSP
应用程序中运行页面的安全上下文。在选择使用按会话组之前,请阅读下面选择策略时的注意事项。
当应用程序共享会话时,它们通过会话对象共享身份验证和数据。共享会话有两种方式:
- 会话
Cookie
路径:具有完全匹配会话cookie
路径的所有应用程序都放置在同一个会话中。 CSPSHARE
:将CSPSHARE=1
放入应用程序页面的链接中。当源应用程序的会话Cookie
路径与目标的会话Cookie
路径不同时使用此选项。
如果需要按会话共享,那么最好的解决方案是命名所有应用程序,以便为它们提供相同的会话 Cookie
路径。可能必须重命名应用程序,因为会话 Cookie
路径必须是应用程序名称的子字符串。
如果无法做到这一点并且需要会话共享,那么必须将 CSPSHARE
参数放在从一个应用程序跳转到另一个应用程序的链接中。目标应用程序页面放置在与源应用程序页面相同的会话中。源的会话由 CSPCHD
参数或会话 cookie
确定。
按 ID 组
可以通过导航到管理门户上的系统管理 > 安全 > 应用程序 > Web 应用程序并在“按 ID
分组”字段中为它们提供组名来对应用程序进行分组。此名称将打开的应用程序组合在一起。组在不同的会话中。应用程序不共享数据。
组名附加到应用程序,而不是命名空间。无论命名空间如何,具有相同组名的应用程序共享身份验证。
身份验证仅在单个浏览器中共享。
CSPSHARE
当 CSP 收到来自浏览器的请求时,它会进行一系列检查以查看它收到的 sessionId
是否有效。这些检查包括:
User-Agent
是否与之前来自该sessionId
的请求相同- 如果正在使用
cookie
,此sessionId
是来自cookie
还是来自CSPCHD
参数
如果传递 CSPSHARE=1
查询参数,CPS
将关闭此检查。然后,可以使用 CSPCHD=sessionId
构造指向另一个 CSP
应用程序的链接并包含当前 sessionId
,以便此链接与现有页面在同一会话中运行。另外,如果在构建链接时 CSPSHARE=1
,CSP
会自动将 CSPCHD=sessionId
插入到链接中。如果手动插入带有 Write
语句的链接,可能需要手动插入 sessionId
。
例如,如果应用程序从 https
页面请求 http
页面(或从 http
页面请求 https
页面),请将 CSPSHARE=1
添加到链接中,如下所示:
#(..Link(%request.URL_"?CSPSHARE=1"))# 复制代码
CSPSHARE=1
强制链接构造添加 CSPCHD
以共享 sessionId
,即使 Caché 检测到 cookie
已启用。