首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java跨不同域的[SSO]单点登录

使用Java跨不同域的[SSO]单点登录
EN

Stack Overflow用户
提问于 2013-08-08 08:25:56
回答 5查看 37.4K关注 0票数 25

我们正在多个应用程序上实现SSO上的单个标志,这些应用程序托管在不同的域和不同的服务器上。

现在,如图所示,我们引入了一个身份验证服务器,它实际上与LDAP交互并对用户进行身份验证。这些应用程序将用于/talk来验证服务器,它们托管在不同的服务器和域上。

对于SSO,我不能使用会话变量,因为有不同的服务器和不同的应用程序,不同的域,域级别的cookie/session变量是没有帮助的。

我正在寻找一个更好的解决方案,可以用于跨他们的SSO。是否存在任何已演示的实现?如果是这样的话,请张贴它或指出我的正确方向。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-08 09:26:14

您可以通过在auth服务器上进行所有登录来实现这一点。其他应用程序可以通过反向通道与auth服务器通信。一般原则如下:

  1. 用户访问应用程序1。
  2. 应用程序1需要用户登录,因此它通过反向通道向auth服务器发送令牌。然后,应用1将用户重定向到auth服务器上的登录页,并将令牌作为请求的参数。
  3. 用户登录到auth服务器。Auth服务器设置cookie,将令牌标记为身份验证,并将用户详细信息与其关联。然后,Auth服务器将用户重定向回应用程序1。
  4. 应用程序1从用户那里获得请求,并通过反向通道调用auth服务器来检查令牌是否正常。用户详细信息的Auth服务器响应。
  5. 应用程序1现在知道用户是被授权的,并且有一些基本的用户细节。

下面是SSO位的位置:

  1. 用户访问应用程序2。
  2. 应用程序2需要用户登录,因此它通过反向通道向auth服务器发送令牌。然后,应用2将用户重定向到auth服务器上的登录页,并将令牌作为请求的参数。
  3. Auth服务器看到存在有效的cookie登录,因此它可以判断用户已经通过身份验证,并知道他们是谁。Auth服务器将令牌标记为身份验证,并将用户详细信息与其关联。然后,Auth服务器将用户重定向回应用程序2。
  4. 应用程序2从用户那里获得请求,并通过反向通道调用auth服务器来检查令牌是否正常。用户详细信息的Auth服务器响应。
  5. 应用程序2现在知道用户是被授权的,并且有一些基本的用户细节。

该方法有一些现有的实现,例如CAS (中央身份验证服务)。请注意,CAS在弹簧安全中是开箱即用的。我建议您考虑使用现有的实现,因为编写自己的实现非常困难。我在我的回答中简化了一些事情,如果你是新手的话,有很大的可能会引入安全漏洞。

票数 43
EN

Stack Overflow用户

发布于 2013-08-16 14:40:37

我会建议你去看看OAuth。它是一种很好的认证和授权协议,广泛应用于facebook、google、windows live等多个大型组织。它可能有一个初始的学习曲线,但它是一个生产级的解决方案。

它还为Java、Ruby、PHP和一系列其他编程语言提供了库。

例如,以下服务器端实现可用于Java。

  • 阿帕奇·琥珀(草案22)
  • OAuth的弹簧安全性
  • Apis授权服务器(v2-31)
  • Restlet框架(草案30)
  • Apache

以下客户端Java库也可用:

  • 阿帕奇·琥珀(草案22)
  • 春社
  • OAuth的弹簧安全性
  • Restlet框架(草案30)

详情请参阅此处:

  • http://oauth.net/2/
  • http://oauth.net/documentation/
票数 3
EN

Stack Overflow用户

发布于 2013-08-14 21:56:46

更大的问题是如何实现单点登录。许多开源甚至专有(IBM )产品值得他们的salt提供跨域的单点登录功能。这将是实现跨域sso的最简单和最好的方法。您可以配置在您选择的sso服务器中使用的LDAP服务器。

以打开sso为例,下面是一篇在http://docs.oracle.com/cd/E19681-01/820-5816/aeabl/index.html上配置跨域单符号的文章

要在开放的sso中配置LDAP,http://docs.oracle.com/cd/E19316-01/820-3886/ghtmw/index.html

关于这个问题的参考资料在这里的一个简洁的图表中给出了http://docs.oracle.com/cd/E19575-01/820-3746/gipjl/index.html

根据所使用的提供,您可以配置跨域单点登录。

这样,您的关系图将如下所示,其中auth服务器是与您选择的sso服务器交互的实用工具。

拥有与sso通信的auth服务器是一个合理的体系结构原则。我建议调用作为REst端点进行身份验证,这些端点可以通过http从不同的应用程序调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18121278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档