老实说,不确定标题是否具有足够的描述性,因此文本如下:
背景故事
我正在使用Spring框架重建Web应用程序。但是,旧的应用程序可以在PHP上运行。
在宽限期中,两个应用程序将同时运行,因此我将把内容慢慢移到Java端而不是PHP。
幸运的是,后端和前端之间的大多数通信都是通过jQuery和AJAX完成的。 我已经设置了许多其余的端点来照顾阅读,并且保存在我的清单上。
问题
现在出现了问题,我的Spring应用程序需要知道实际上是否允许登录的用户保存数据。 一位同事建议我使用Jasig CAS SSO进行身份验证,以便php和java应用程序都将使用相同的登录名。
然而,这里也存在问题。我已经设置了Spring Security来与SSO一起使用,PHP也知道如何使用它。但是,问题出在我向Spring端发出AJAX请求时。 Spring Security检测到我尚未登录(可能是因为没有发送Cookie),因此返回了302以便我进入CAS登录页面。
我设法使所有内容都在同一个(非面向外部的)域上运行:
请求从app.domain.local发送到tools.domain.local
我已经阅读了很多有关票证授予cookie,票证授予票证,在ajax请求中发送会话信息的知识,以及有关身份验证代理的信息。
问题
告诉我已经通过cas SSO服务器进行身份验证的ajax请求,这是告诉Java端的最佳方法是什么?
请询问是否需要更多信息。这是我的第一个stackoverflow问题,我不太清楚该怎么写。
答案 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。
花几天时间找出答案。