我们正在实现跨多个应用程序的单点登录[SSO],这些应用程序托管在不同的域和不同的服务器上。
现在如图所示,我们引入了一个认证服务器,它实际上与LDAP交互并对用户进行身份验证。将要与认证服务器一起使用/通信的应用程序托管在不同的服务器和域上。
对于SSO,我不能使用会话变量,因为有不同的服务器、不同的应用程序和不同的域,域级别的cookie/会话变量没有帮助。
我正在寻找更好的解决方案,可用于跨它们进行SSO。是否存在任何演示实现?如果是,请发布它或将我指向正确的方向。
我们正在实现跨多个应用程序的单点登录[SSO],这些应用程序托管在不同的域和不同的服务器上。
现在如图所示,我们引入了一个认证服务器,它实际上与LDAP交互并对用户进行身份验证。将要与认证服务器一起使用/通信的应用程序托管在不同的服务器和域上。
对于SSO,我不能使用会话变量,因为有不同的服务器、不同的应用程序和不同的域,域级别的cookie/会话变量没有帮助。
我正在寻找更好的解决方案,可用于跨它们进行SSO。是否存在任何演示实现?如果是,请发布它或将我指向正确的方向。
有一些现有的实现该方法,例如CAS(中央认证服务)。请注意,Spring Security开箱即用地支持CAS。我建议您考虑使用现有的实现方法,因为自己编写将会很困难。在我的答案中,我已经简化了一些内容,如果您对此不熟悉,可能会引入安全漏洞。
根据您使用的产品,您可以配置跨域单点登录。
有了这个功能,您的图表将如下所示,其中认证服务器是与您选择的SSO服务器进行交互的实用程序。
拥有与SSO通信的认证服务器是一个合理的架构原则。我建议使用REST终端点进行身份验证调用,这些终端点可以通过HTTP从不同的应用程序进行调用。
您不能使用Rest服务。
您可以使用我所谓的引荐者URL身份验证。假设您在www.AAAA.com上运行一个身份验证应用程序,在您想要进行身份验证的应用程序中,您可以设置一个过滤器,该过滤器在其域中查找已经通过身份验证的cookie,否则将重定向到www.AAAA.com进行身份验证
在成功身份验证
后,您可以将用户配置文件信息作为加密的GET / POST数据传递回应用程序
自从我构建了一个Java应用程序后,我一直在寻找它的SSO解决方案。我发现了一个免费的Java SAML连接器,使用它可以在任何基于Java框架构建的Java应用程序中实现SSO。
这是它的链接 - https://plugins.miniorange.com/java-single-sign-on-sso-connector