我们公司有多个域名,每个域名都托管了一个网站,并且每个域名目前都有自己的身份验证方式,通过 cookie 实现。
当一个已登录的用户需要从另一个域名访问任何内容时,用户需要在另一个域名上使用不同的凭据再次登录。
我考虑转向单点登录(SSO),以消除这种麻烦。 我将感激任何关于如何实现这一目标的想法,因为我在这方面没有任何经验。
谢谢。
编辑: 这些网站是互联网(外部)和内联网(公司内部使用)网站的混合体。
我们公司有多个域名,每个域名都托管了一个网站,并且每个域名目前都有自己的身份验证方式,通过 cookie 实现。
当一个已登录的用户需要从另一个域名访问任何内容时,用户需要在另一个域名上使用不同的凭据再次登录。
我考虑转向单点登录(SSO),以消除这种麻烦。 我将感激任何关于如何实现这一目标的想法,因为我在这方面没有任何经验。
谢谢。
编辑: 这些网站是互联网(外部)和内联网(公司内部使用)网站的混合体。
login.mydomain.example
,其中包含管理登录的脚本master_login.php
。client_login.php
。login.mydomain.example/master_login.php
)。如果用户没有登录到主域,则从用户请求身份验证(即显示登录页面)。用户认证成功后该解决方案会在数据库中创建一个会话。如果用户已经通过身份验证,则在数据库中查找其会话ID。client.mydomain.example/client_login.php
)并传递会话ID。注意:
master_login.php
只会将重定向发送到其白名单中的域。client1.abc.example
,client2.xyz.example
,login.mydomain.example
不要重复造轮子。有许多开源的跨域单点登录包,例如 JOSSO、OpenSSO、CAS、Shibboleth 等等。如果你在全程使用 Microsoft 技术(IIS、AD),那么可以使用 Microsoft 联合身份验证服务(ADFS)。
这些主机名有多不同?
这些主机可以共享cookie:
mail.xyz.example
www.xyz.example
logon.xyz.example
但是这些不能:
abc.example
xyz.example
www.tre.example
对于前一种情况,您可以使用基于Cookie的解决方案。考虑GUID和数据库会话表。