第二十五章 CSP Session 管理 - 选择策略时的注意事项
组的注意事项
本节包含创建身份验证组时要考虑的一些要点。
- 仅当决定必须通过会话对象共享数据时才使用会话共享。
By-ID
和登录Cookie
共享更加强大和可预测。 - 创建组时,尽可能保持一致,以便为目标用户创建统一的行为。不要将应用程序同时放在
By-ID
组和By-Session
组中。使用不同的身份验证策略可能会导致意外行为。By-ID
优先于By-Session
。因此,如果一个应用程序两者都有,它会保持同步By-ID
。 - 对组的所有成员使用相同的身份验证类型。特别是,如果组中的某些应用程序允许登录
Cookie
而其他应用程序不允许,则通过用户名/密码进入组会验证整个组,而通过登录cookie
输入只会验证部分应用程序。这可能会导致用户对为什么有时需要登录而有时不需要登录感到困惑。 CSP
服务器认为每个应用程序都在一个身份验证组中。会话中的一个单独的应用程序形成一个单实体By-Session
身份验证组。)- 尽量不要将未经身份验证的应用程序放在
By-ID
组中。 By-Session
组很脆弱;使用By-ID
是一种更稳健的方法。由于有关组的所有信息(包括其共享数据)都包含在单个会话中,因此该组很容易丢失。这是因为会话可能会超时,即在特定时间后会话会自动销毁。如果用户离开他的计算机或使用不在By-Session
组中的应用程序,则会话可能会超时。如果组中的应用程序之一标记ENDSESSION=1
,则该组被分散。- 如果浏览器打开的选项卡包含来自分散的应用程序的页面,单击它们可能需要多次登录,特别是如果它们最初使用
CSPSHARE=1
进行分组。在任何情况下,来自原始会话的数据都会永久消失。 - 当组失去其身份验证时,刷新或从组应用程序转到打开的页面需要用户重新登录。
- 结束包含
By-Session
应用程序的会话要求用户在刷新该by-session
组中的任何应用程序的任何页面时重新登录。终止包含By-ID
应用程序的会话不需要任何登录,除非该会话的应用程序是该组的唯一成员。 - 注销会话会注销会话组的所有成员,即使他们在不同的会话中。刷新任何组的页面都需要重新登录。但是,对于按
ID
组,一个登录会登录整个组。对于By-Session
组,只要CSP
网关能够将分散的应用程序引导回新构建的会话对象,一个登录就会登录整个组。 - 注销不会破坏会话,因此任何会话数据都会继续存在。
- 不能让同一应用程序在同一浏览器的不同选项卡中登录到两个不同的用户。
- 身份验证仅在单个浏览器中共享。此运行时标识符存储在
%Session
对象中。 - 分组允许与同一组 (
By-ID
) 或同一会话 (By-Session
) 中的用户共享身份验证。如果想从指定组之外的应用程序共享身份验证,请使用登录Cookie
。如果要将身份验证发送到指定组之外的应用程序,请使用CSPSHARE=1
。 (请参阅本书中的“关于CSPSHARE
的注意事项”部分。)
关于 CSPSHARE
的注意事项
使用 CSPSHARE
作为最后的手段。
在以下情况下,按会话应用程序链接不需要 CSPSHARE=1
:
- 如果源应用程序和目标应用程序具有相同的组
ID
。 - 如果目标页面与源页面在同一个应用程序中。
- 如果目标页面应用程序的会话
Cookie
路径与源应用程序的会话Cookie
路径匹配。
共享数据
By-Session
组可以通过会话对象共享数据。
By-ID
组必须管理自己的数据。例如,如果数据存储在全局中,则可以使用当前用户 $Username
或组的运行时 ID
对数据进行键控。 CSP
服务器为每个浏览器分配一个 browser-id cookie
。创建 By-Id
组时,会为其分配一个键,该键是与组 ID
连接的浏览器 ID
。这将创建一个唯一键 %CSP.Session.BrowserId
,它可以用作存储数据的键。