如何在两个Web应用程序(PHP和Java EE)之间进行单点登录(SSO)?

Rob*_*ume 5 php java-ee single-sign-on

我有一个在GlassFish 3.1上运行的现有Java EE Web应用程序。通过在GlassFish 3.1中配置的jdbcRealm,登录可以正常工作。

另一个团队中的某人正在用PHP开发一个单独的Web应用程序,老板不希望这些应用程序的用户必须登录两次。也就是说,当他们登录Java Web应用程序并单击将其带到PHP应用程序的链接时,它们也应该已经登录到该应用程序。(反之亦然。)

不确定如何实施。我当时以为我可以生成一个长随机密钥(令牌),该随机密钥是在任一应用程序的登录时生成的,并在每个Web请求中传递给任一应用程序以标识已登录的用户,但这似乎并不安全。

我需要正确方向的指针。

dan*_*oel 2

你说

我认为我可以生成一个长随机密钥(令牌),该密钥在任一应用程序登录时生成,并在任一应用程序的每个 Web 请求中传递以识别登录用户,但这似乎并不安全。

但这本质上就是会话的工作方式。

您最好的选择是生成一个唯一的登录标识符(如您所说),将其存储在两个应用程序都可以访问的数据库或内存缓存中,并找到一种方法来保存它,以便两个网络应用程序都可以检索它。

如果两个应用程序位于同一根域,您可以使用路径设置为 的 cookie,/以便两个应用程序都可以访问它。

如果两个应用程序都位于不同的根域上,那么情况会更加棘手。

至于传递的标识符令牌的安全性,您可以在每个请求上重新生成标识符,这可以防止 cookie 劫持。