使用Java跨不同域单点登录[SSO]
我们正在跨多个应用程序实施单点登录[SSO],这些应用程序托管在不同的域和不同的服务器上 现在,如图所示,我们将介绍一个身份验证服务器,它实际上与LDAP交互并对用户进行身份验证。这些应用程序将用于/对话对服务器进行身份验证,它们托管在不同的服务器和域中 对于SSO,我不能使用会话变量,因为有不同的服务器、不同的应用程序、不同的域,域级别的cookie/会话变量没有帮助使用Java跨不同域单点登录[SSO],java,authentication,servlets,single-sign-on,multiple-domains,Java,Authentication,Servlets,Single Sign On,Multiple Domains,我们正在跨多个应用程序实施单点登录[SSO],这些应用程序托管在不同的域和不同的服务器上 现在,如图所示,我们将介绍一个身份验证服务器,它实际上与LDAP交互并对用户进行身份验证。这些应用程序将用于/对话对服务器进行身份验证,它们托管在不同的服务器和域中 对于SSO,我不能使用会话变量,因为有不同的服务器、不同的应用程序、不同的域,域级别的cookie/会话变量没有帮助 我正在寻找一个更好的解决方案,可以用于跨他们的SSO。是否存在任何已演示的实现?如果是这样的话,请把它贴出来或给我指出正确的
我正在寻找一个更好的解决方案,可以用于跨他们的SSO。是否存在任何已演示的实现?如果是这样的话,请把它贴出来或给我指出正确的方向。您不能使用Rest服务 您可以使用我所称的参考Url身份验证 假设您在www.AAAA.com上运行身份验证应用程序 在要进行身份验证的应用程序中,
您可以使用一个过滤器在其域中查找经过身份验证的cookie,否则将重定向到www.AAAA.com进行身份验证
在
Successfull authentication
上,您可以将用户配置文件信息作为加密的GET/POST数据传递回应用程序
您可以通过在auth服务器上进行所有登录来实现这一点。其他应用程序可以通过后台通道与身份验证服务器通信。一般原则如下:
此方法有一些现有的实现,例如(中央身份验证服务)。请注意,在中,CAS受开箱即用支持。我建议您考虑使用现有的实现,因为编写自己的实现将很困难。在我的回答中,我已经简化了一些事情,如果您是新手,那么引入安全漏洞的可能性很大。更大的问题是您如何实现单点登录。许多开源甚至专有(IBM Tivoli)产品都提供了跨域单点登录功能。这将是实现跨域sso的最简单和最好的方法。您可以配置在所选sso服务器中使用的LDAP服务器 以OpenSSO为例,下面是一篇配置跨域单点登录的文章 要在开放式sso中配置LDAP, 关于这个问题的参考资料在这里以一个简洁的图表呈现 根据您使用的产品,您可以配置跨域单点登录 这样,您的关系图将如下所示,auth服务器是您与所选sso服务器交互的实用工具 拥有与sso通信的身份验证服务器是一个可靠的体系结构原则。我建议调用REst端点进行身份验证,这些端点可以通过http从不同的应用程序调用
我会建议您查看OAuth。它是一个很好的身份验证和授权协议,被包括facebook、google、windows live和其他大型组织使用。它可能有一个初始学习曲线,但它是一个生产级解决方案 它还有Java、Ruby、PHP和一系列其他编程语言的库 例如,以下服务器端实现可用于Java
- 阿帕奇琥珀色(草案22)
- OAuth的Spring安全性
- API授权服务器(v2-31)
- Restlet框架(草案30)
- ApacheCXF
- 阿帕奇琥珀色(草案22)
- 春季社交
- OAuth的Spring安全性
- Restlet框架(草案30)
这里是它的链接-我计划使用REST/WebService。我关心的是1。如何知道用户已登录?如果我有公共域,会话变量可以用于维护数据。但若我们使用多个域,我如何知道用户是否已经登录第二种方法,你们有任何这样的工作教程吗