单个登录跨多个域

Pas*_*cal 106 authentication single-sign-on

我们公司设有多个域,每个域上都有一个网站.此时,每个域都有自己的身份验证,通过cookie完成.

当登录到一个域的某个人需要访问另一个域的任何内容时,用户需要使用位于另一个域的另一个网站上的不同凭据再次登录.

我正在考虑转向单点登录(SSO),这样就可以消除这种麻烦.我很感激有关如何实现这一点的任何想法,因为我在这方面没有任何经验.

谢谢.

编辑: 网站是互联网(外部)和内部网(公司内部使用)网站的混合.

gro*_*rom 87

我在这里实现的SSO解决方案的工作原理如下:

  1. 有一个主域login.mydomain.com,其脚本master_login.php用于管理登录.
  2. 每个客户端域都有脚本client_login.php
  3. 所有域都有一个共享的用户会话数据库.
  4. 当客户端域要求用户登录时,它会重定向到主域(login.mydomain.com/master_login.php).如果用户尚未登录到主服务器,则它请求来自用户的认证(即,显示登录页面).用户通过身份验证后,会在数据库中创建会话.如果用户已经过身份验证,则会在数据库中查找其会话ID.
  5. 主域返回传递会话ID的客户端域(client.mydomain.com/client_login.php).
  6. 客户端域创建一个cookie,用于存储来自主服务器的会话ID.客户端可以通过使用会话ID查询共享数据库来找出登录用户.

笔记:

  • 会话ID是使用RFC 4122中的算法生成的唯一全局标识符
  • master_login.php将仅重定向到其白名单中的域
  • 主服务器和客户端可以位于不同的顶级域中.例如.client1.abc.com,client2.xyz.com,login.mydomain.com

  • 你如何处理案件whare主域login.mydomain.com下降?那时登录不可能吗? (3认同)
  • 任何机构都会生成任何代码示例或github repo? (3认同)
  • 如果他们不共享用户数据库怎么办?每个合作伙伴Web应用程序都有自己的用户群.我们怎么遇到这个? (2认同)

Mar*_*rkc 33

不要重新发明轮子.有许多开源跨域SSO包,如JOSSO,OpenSSO,CAS,Shibboleth等.如果您在整个过程中使用Microsoft技术(IIS,AD),则可以使用Microsoft联合(ADFS).

  • OpenSSO已经死了,JOSSO和CAS是JAVA解决方案.只是一个FYI (10认同)
  • +1你几乎不应该重新发明安全轮. (5认同)
  • 绝对 - 我已经看到太多人推出他们自己的安全解决方案只是为了发现他们容易受到重播,XSRF或其他攻击 (3认同)

jas*_*ldo 14

主机名有多大不同?

这些主机可以共享cookie:

  • mail.xyz.com
  • www.xyz.com
  • logon.xyz.com

但这些不能:

  • abc.com
  • xyz.com
  • www.tre.com

在前一种情况下,您可以敲出基于cookie的解决方案.想想GUID和数据库会话表.


Mik*_*ike 2

如果您使用 Active Directory,则可以让每个应用程序使用 AD 进行身份验证,这样登录就可以无缝进行。

否则,如果应用程序可以在幕后相互通信,您可以使用 sessionid 并让一个应用程序处理 id 生成,为所有其他应用程序提供服务。

  • 当用户第一次登陆这些网站进行此会话时,是否仍然需要在domain1.com、domain2.com和domain3.com上输入用户名和密码? (2认同)