我们公司设有多个域,每个域上都有一个网站.此时,每个域都有自己的身份验证,通过cookie完成.
当登录到一个域的某个人需要访问另一个域的任何内容时,用户需要使用位于另一个域的另一个网站上的不同凭据再次登录.
我正在考虑转向单点登录(SSO),这样就可以消除这种麻烦.我很感激有关如何实现这一点的任何想法,因为我在这方面没有任何经验.
谢谢.
编辑: 网站是互联网(外部)和内部网(公司内部使用)网站的混合.
我在这里实现的SSO解决方案的工作原理如下:
有一个主域login.mydomain.com,其脚本master_login.php用于管理登录.
每个客户端域都有脚本client_login.php
所有域都有一个共享的用户会话数据库.
当客户端域要求用户登录时,它会重定向到主域(login.mydomain.com/master_login.php).如果用户尚未登录到主服务器,则它请求来自用户的认证(即,显示登录页面).用户通过身份验证后,会在数据库中创建会话.如果用户已经过身份验证,则会在数据库中查找其会话ID.
主域返回传递会话ID的客户端域(client.mydomain.com/client_login.php).
客户端域创建一个cookie,用于存储来自主服务器的会话ID.客户端可以通过使用会话ID查询共享数据库来找出登录用户.
笔记:
会话ID是使用RFC 4122中的算法生成的唯一全局标识符
master_login.php将仅重定向到其白名单中的域
主服务器和客户端可以位于不同的顶级域中.例如.client1.abc.com,client2.xyz.com,login.mydomain.com
不要重新发明轮子.有许多开源跨域SSO包,如JOSSO,OpenSSO,CAS,Shibboleth等.如果您在整个过程中使用Microsoft技术(IIS,AD),则可以使用Microsoft联合(ADFS).
主机名有多大不同?
这些主机可以共享cookie:
mail.xyz.com
www.xyz.com
logon.xyz.com
但这些不能:
abc.com
xyz.com
www.tre.com
在前一种情况下,您可以敲出基于cookie的解决方案.想想GUID和数据库会话表.