第二十三章 CSP Session 管理 - 身份验证共享策略

第二十三章 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 应用程序中运行页面的安全上下文。在选择使用按会话组之前,请阅读下面选择策略时的注意事项。

当应用程序共享会话时,它们通过会话对象共享身份验证和数据。共享会话有两种方式:

  1. 会话 Cookie 路径:具有完全匹配会话 cookie 路径的所有应用程序都放置在同一个会话中。
  2. 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=1CSP 会自动将 CSPCHD=sessionId 插入到链接中。如果手动插入带有 Write 语句的链接,可能需要手动插入 sessionId

例如,如果应用程序从 https 页面请求 http 页面(或从 http 页面请求 https 页面),请将 CSPSHARE=1 添加到链接中,如下所示:

#(..Link(%request.URL_"?CSPSHARE=1"))#

CSPSHARE=1 强制链接构造添加 CSPCHD 以共享 sessionId,即使 Caché 检测到 cookie 已启用。

你可能感兴趣的:(第二十三章 CSP Session 管理 - 身份验证共享策略)