如何使用JASIG SSO同时验证两个客户端

时间:2018-09-06 20:21:59

标签: java php spring spring-security cas

老实说,不确定标题是否具有足够的描述性,因此文本如下:

背景故事

我正在使用Spring框架重建Web应用程序。但是,旧的应用程序可以在PHP上运行。

在宽限期中,两个应用程序将同时运行,因此我将把内容慢慢移到Java端而不是PHP。

幸运的是,后端和前端之间的大多数通信都是通过jQuery和AJAX完成的。 我已经设置了许多其余的端点来照顾阅读,并且保存在我的清单上。

问题

现在出现了问题,我的Spring应用程序需要知道实际上是否允许登录的用户保存数据。 一位同事建议我使用Jasig CAS SSO进行身份验证,以便php和java应用程序都将使用相同的登录名。

然而,这里也存在问题。我已经设置了Spring Security来与SSO一起使用,PHP也知道如何使用它。但是,问题出在我向Spring端发出AJAX请求时。 Spring Security检测到我尚未登录(可能是因为没有发送Cookie),因此返回了302以便我进入CAS登录页面。

我设法使所有内容都在同一个(非面向外部的)域上运行:

  • cas.domain.local
  • app.domain.local(PHP)
  • tools.domain.local(Java)

请求从app.domain.local发送到tools.domain.local

我已经阅读了很多有关票证授予cookie,票证授予票证,在ajax请求中发送会话信息的知识,以及有关身份验证代理的信息。

问题

告诉我已经通过cas SSO服务器进行身份验证的ajax请求,这是告诉Java端的最佳方法是什么?

请询问是否需要更多信息。这是我的第一个stackoverflow问题,我不太清楚该怎么写。

3 个答案:

答案 0 :(得分:0)

您将需要向spring-security添加一些设置。 点击here查看文档。

答案 1 :(得分:0)

在这种情况下,我认为您不会对CAS感到满意。 我最好的猜测是使用 JWT 来处理您的身份验证。 JWT可以以安全的方式封装身份验证信息,您可以通过Http-Header将它们发送到两个应用程序,也可以通过您在超级域 domain.local 上设置的cookie将它们发送给两个域。您仍然可以为应用程序使用两个单独的“本地”会话。

答案 2 :(得分:0)

所以最终我意识到所有 都可以正常工作,包括AJAX端的身份验证,但是我的配置全错了。

显然https://cas.local/cas是与https://cas.local/cas/不同的端点。 这导致在这种特殊情况下无法识别Cookie。

花几天时间找出答案。