在不同语言的服务之间共享单个Web会话的解决方案

时间:2019-03-05 17:22:11

标签: authentication java session-management single-sign-on

我有一个系统,正在运行混合Java和另一种语言编写的应用程序,并且我希望该应用程序有一个登录会话。

通过单次登录会话

  • 单点登录
  • 如果会话处于活动状态,则可以无缝访问任何服务
  • 退出一个应用程序会使该会话对其他会话无效
  • 会话将具有滑动导出超时和绝对超时
  • 任何应用程序中的活动都会使该会话对于其他任何应用程序保持活动状态。

我目前使用CAS作为SSO登录解决方案。

根据我的调查,看来CAS not 没有提供一个会话。尽管它具有TGT形式的会话,但该会话是应用程序内部的,不打算供客户端应用程序使用。

如果所有应用程序都是Java,那么我可以使用像Redis这样支持的Spring Sessions来实现目标。

但是我的某些应用程序是用其他语言编写的,因此我将无法使用Java会话。

我有一些解决方案的想法

a)使用CAS,并以某种方式使用TGT会话。看着https://stackoverflow.com/questions/6272536/tgt-expiring-if-we-are-using-app1-and-not-using-other似乎很难做到。

b)使用CAS并使用代理PGT以更可控的方式访问TGT。对于使用活动使会话保持活动状态,我并没有进行太多研究。

c)使用现成的聚会会话机制,该机制为我提供了创建/扩展和终止会话的API,并使用每种语言编写了钩子以使用此会话。不幸的是我还没有找到这种机制。

d)使用Java会话,并为非Java应用程序编写一个允许验证JSESSION id的API,并向非Java语言编写钩子以读取JSESSION cookie并对该API进行调用。有效地使用Spring Sessions编写我自己的c)版本

e)用Java为非Java应用程序编写一个反向代理,以验证会话,然后调用实际的http端点,并添加包含会话信息的标头(例如JWT)。在应用程序中编写钩子以读取这些JWT并对其进行验证(例如,使用HMAC)。

感谢您对以上选项的任何输入,因为我没有找到通过搜索SO或网络解决上述问题的明确解决方案。

0 个答案:

没有答案