gpt4 book ai didi

java - 多个实例上多个同名客户端的 CAS

转载 作者:行者123 更新时间:2023-12-02 01:12:32 27 4
gpt4 key购买 nike

我们有两个应用程序(abcdef)是在 Struts2 中开发的,并与用于 SSO 的 CAS 服务器 3.2 集成,部署在多个主机 (IP) 上。该部署架构图如下。 SSO 在以下部署中运行良好,没有任何问题。

enter image description here

我们部署了相同的两个 CAS 客户端(abcdef)以及多个实例(带有端口 80808081 的 tomcat) )在同一主机上。请参阅下面的部署架构图。使用此 SSO 时,单点登录工作正常,但当用户从 abc 应用程序注销时(其在 Host28081 端口上运行)然后 session 过期请求将发送到 def 应用程序(其在 Host28080 端口上运行)。使用此用户不会从 def 应用程序(其在 Host28081 端口上运行)注销( session 未过期)。

enter image description here

也许这是个愚蠢的问题,我也不知道。如何解决这个问题。任何人请帮助我。在上面的两个场景中,URL 是相同的 http://domain.in/abc/login.dohttp://domain.in/def/login.do

更新:

abc注销,在应用程序def中保持登录状态。

Looks like you are trying to achieve some kind of cluster here?

是的。我想从所有 CAS 客户端实现单点注销。但这里并没有发生。如上所述,注销命令正在发送到其他实例。

Do you have session replication among the nodes of the same application setup?

粘性 session 。

How do you route the traffic from clients (or from CAS) to the individual app nodes?

负载均衡器

最佳答案

关于所描述的负载平衡变体

首先,应该注意的是,客户端应用程序集群由 2 个或 4 个节点组成并不重要。所描述的问题在任何情况下都应该发生。因为 CAS 服务器始终只知道并使用给定客户端应用程序的一个地址 - 指向负载均衡器的地址。

问题出在哪里

如上所述,sticky sessions ( session 关联)用于负载平衡。并且由于默认情况下 CAS 服务器使用所谓的“反向 channel ”进行单点注销 (SLO),因此它会向给定的客户端应用程序本身发出 (POST) 注销请求,不传递任何 session 标识符( Java servlet 名为 JSESSIONID 的 cookie)。因此,负载均衡器必须随机选择目标节点。

如何解决问题

通常有两种可能的解决方案:

  1. 负责将“反向 channel ”注销请求传播到所有其他节点。这意味着 CAS 服务器或给定应用程序需要知道所有其他节点的地址 - 并将请求传递给它们。
  2. 使用所谓的“前 channel ”而不是“后 channel ”SLO。这意味着稍微修改的 (GET) 注销请求是由用户的浏览器而不是 CAS 服务器完成的。这意味着浏览器还随请求传递应用程序 session 标识符,并且负载均衡器这次可以选择正确的节点来使 session 失效。对于 Apereo CAS,这是告诉 CAS 应在相应的 CAS 服务/客户端应用程序配置中使用前 channel (请参阅其文档,例如 6.1.x )并使用兼容的 CAS client 的问题。在应用程序中。

OP 选项

您正在使用相当旧的 CAS 版本 3.2 - “前 channel ”SLO 似乎没有在 3.x 系列中实现。因此,选项如下:

  1. 坚持使用 CAS 3.x 并尝试以某种方式实现解决方案 1。

  2. 通过以下方式使用解决方案 2:

a) 尝试将某些较新 CAS 版本(见下文)的“前 channel ”SLO 合并到 CAS 3.x 中。

b) 升级到 CAS 4.x 并使用其“前 channel ”SLO,“版本 1”。在此版本中,CAS 依赖于注销请求的同步链接 - 应用程序被一个接一个地调用,每个应用程序都必须将浏览器重定向回 CAS,因此 CAS 可以重定向到另一个应用程序。链。

c) 升级到 CAS 5.x 或更高版本并使用其“前 channel ”SLO,“版本 2”。在此版本中,CAS 默认情况下会发出异步 Ajax 注销请求,这应该会带来更快、更稳定的 SLO。

进一步阅读

关于java - 多个实例上多个同名客户端的 CAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59152357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com