单个登录跨多个域

时间:2008-09-04 19:06:23

标签: authentication single-sign-on

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

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

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

感谢。

修改 这些网站混合了互联网(外部)和内部网(公司内部使用)网站。

4 个答案:

答案 0 :(得分:84)

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

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

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

答案 1 :(得分:31)

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

答案 2 :(得分:14)

主机名有多大不同?

这些主机可以共享cookie:

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

但这些不能:

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

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

答案 3 :(得分:2)

如果您使用Active Directory,您可以让每个应用程序使用AD进行身份验证,然后登录可以无缝连接。

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