第二十四章 CSP Session 管理 - 认证架构
认证架构
安全上下文和粘性登录
应用程序在会话中运行。会话需要运行应用程序的安全上下文。安全上下文包含身份验证状态。
By-Sessions
和 By-ID Groups
有一个粘性登录,它会记住会话或组中使用的最后一个应用程序的安全上下文。如果组应用程序中的用户以其他用户身份登录,则会更新粘性登录。 (如果用户登录到未经身份验证的应用程序,则粘滞登录不会更新。)
在会话中跳转到应用程序时,会话会尝试使用适合目标应用程序的粘性登录。如果粘性登录与会话的当前安全上下文不匹配,并且应用程序可以接受粘性登录中的身份验证方法,则会话的安全上下文切换到粘性上下文中的安全上下文。
会话结束时,会话的粘性登录会丢失。当包含该组的任何应用程序的所有会话都结束时,该组的粘性登录将丢失。
初始登录后,组有一个关联的粘性登录对象,它在进入组的一个应用程序时尝试使用该对象。当组中的应用程序输入为 UnknownUser
时,粘性登录不会更新,因为这会将组中的所有其他应用程序移动到未经身份验证的安全上下文中。
如果粘性登录包含经过双重身份验证的用户,则该双重身份验证用于非双重身份验证应用程序,只要用户名身份验证在两个应用程序中匹配即可。
级联认证
CSP 服务器在尝试获取应用程序的身份验证信息时使用优先级。它尝试在以下每个事件中获取新的身份验证信息:
- 对于新会话的第一个请求;
- 当会话内有应用程序更改时;
- 当应用程序是
By-id
组的一部分并且会话的当前安全上下文与组的粘性上下文不匹配时; - 当请求包含用户名/密码对时。
它尝试按以下顺序依次获取新的身份验证信息:
- 显式登录:检查用户是否输入了经过身份验证的用户名/密码。如果他们这样做了,系统会更新应用程序的身份验证组的上下文。 (这将设置组的粘滞登录。)
- 粘性登录:获取应用程序组的粘性上下文。如果没有粘性登录和按会话分组,请使用会话的当前上下文。
- 登录
Cookie
:如果存在并为此应用程序启用,则使用。 - 未经身份验证:如果为应用程序启用,则使用未知用户。
- 建立登录页面:如果以上都失败,则向用户请求用户名/密码。如果从
%CSP.Session API
调用,则只尝试用户名/密码。登录后,更新组的粘性登录,除非刚刚以UnknownUser
身份登录。
注销或结束会话
会话注销或结束时身份验证丢失。可以在方法中使用以下 %CSP.Session注销或结束会话:
推荐:CacheLogout=end
注销 CSP
会话的推荐方法是链接到应用程序主页,并传递包含字符串 CacheLogout=end
的 URL
。这会在尝试运行主页之前结束当前会话——释放任何获得的许可证、删除现有会话数据并删除会话的安全上下文。
如果此 CSP
应用程序需要身份验证,则没有会话,也没有经过身份验证的用户。在这种情况下,Caché
不运行主页逻辑,而是显示登录页面。当用户提交有效登录时,这将启动这个新会话,然后显示主页。
Set EndSession? =1
这会杀死会话。会话的粘性上下文被破坏。 OnEndSession
被调用。如果会话包含 By-Session
组,则该组被销毁。如果会话包含 By-Id
应用程序,则该应用程序将从继续存在的组中删除,除非这是该组中的唯一应用程序。登录 cookie
不受影响。按会话组丢失其数据。但是,对于 By-Id
组,该组的粘性登录不受单一破坏的影响,并且该组的其他成员保持登录状态。
此外,对于By-Session
组,销毁会分散组中的成员,如果成员应用程序重新进入,则不能保证它们将被重新集成到同一个新会话中,或者(如果它们使用CSPSHARE
进行分组)发送到不同的会话。
Session Logout
会话已注销。它的粘性上下文被破坏了。如果会话包含按会话组,则该组中的所有应用程序都将失去其身份验证。如果会话包含来自 by-id
组的应用程序,则组会丢失其粘性上下文,并且组中的所有应用程序都将被注销。
此外,还会调用 OnLogout
。登录 cookie
被销毁。
会话继续存在,因此为 By-Session
组保留数据。
Session Logout All
可以注销当前作为特定用户身份验证的所有会话。
这会破坏登录 cookie
。
会话继续存在但没有身份验证。