单一login跨多个域

我们公司有多个域名,每个域名都有一个网站。 在这个时候,每个域都有自己的authentication,这是通过cookie完成的。

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

我正在考虑走向单点login(SSO),这样可以消除这个麻烦。 对于如何实现这一点,我将不胜感激,因为我在这方面没有任何经验。

谢谢。

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

我在这里实现的SSO解决scheme如下:

  1. 有一个主域名,login.mydomain.com和脚本master_login.phppipe理login。
  2. 每个客户端域都有脚本client_login.php
  3. 所有的域都有一个共享的用户会话数据库。
  4. 当客户端域名要求用户login时,它将redirect到主域(login.mydomain.com/master_login.php)。 如果用户没有login到主机,则向用户请求authentication(即显示login页面)。 用户通过身份validation后,会在数据库中创build一个会话。 如果用户已经被authentication,则在数据库中查找他们的会话ID。
  5. 主域返回到传递会话ID的客户端域(client.mydomain.com/client_login.php)。
  6. 客户端域创build一个存储来自主服务器的会话ID的cookie。 客户端可以通过使用会话ID查询共享数据库来findlogin的用户。

笔记:

  • 会话ID是使用RFC 4122algorithm生成的唯一全局标识符
  • master_login.php只会redirect到白名单中的域
  • 主人和客户可以在不同的顶级域名。 例如。 client1.abc.com,client2.xyz.com,login.mydomain.com

不要重新发明轮子。 有许多开源的跨域SSO软件包,如JOSSO,OpenSSO,CAS,Shibboleth等。 如果您始终使用Microsoft技术(IIS,AD),则可以使用Microsoft联合身份validation(ADFS)。

主机名称有多不同?

这些主机可以共享cookie:

但是这些不能:

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

如果您使用Active Directory,您可以让每个应用程序使用AD进行身份validation,那么login可以是无缝的。

否则,如果应用程序可以在幕后与对方交谈,则可以使用sessionid,并使用一个应用程序处理ID生成服务所有其他应用程序。