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

How to authenticate two clients at once with JASIG SSO

老实说,不确定标题是否足够描述,所以这里是正文:

背景故事

我正在使用 Spring 框架重建 Web 应用程序。但是,旧应用程序在 PHP.

上运行

有一个宽限期,两个应用程序将同时 运行,所以我会慢慢地将内容移到 java 一侧并远离 PHP。

幸运的是,后台和前端之间的大部分通信都是通过 jQuery 和 AJAX 完成的。 我已经设置了许多休息端点来处理阅读,保存是我列表中的下一个。

问题

现在问题出现了,我的 Spring 应用程序需要知道登录的用户是否真的被允许保存数据。 一位同事建议我使用 Jasig CAS SSO 作为身份验证,这样 php 和 java 应用程序将使用相同的登录名。

然而这里也存在一个问题。我已设置 spring 安全性以使用 SSO,而且 PHP 知道如何使用它。但是,当我向 Spring 方发出 AJAX 请求时,问题就来了。 Spring 安全检测到我没有登录(可能是因为没有发送 cookie)因此 returns 一个 302 让我去 CAS 登录页面。

我已经设法在同一个(非面向外的)域上获得所有内容 运行:

请求来自 app.domain.local 到 tools.domain.local

我已经阅读了很多有关票证授予 cookie、票证授予票证、在我的 ajax 请求中发送 session 信息以及称为身份验证代理的东西的内容。

问题

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

请询问是否需要更多信息。这是我的第一个 Whosebug 问题,我不太清楚如何表达所有内容。

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

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

所以最终我意识到一切 都在 工作,包括 AJAX 端的身份验证,但我的配置全错了。

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

虽然我花了几天时间才搞清楚。