我有一个网站,用户将登录他/她的帐户,然后他们会被重定向到另一个网站,他们应该自动登录。两个网站都可以访问同一个数据库。用户将使用令牌进行身份验证,但如何将其传递给其他网站。
答案 0 :(得分:0)
根据服务器技术的不同,有多种选择。
您没有告诉您的服务器是什么平台(windows,linux)以及您使用的Web服务器(Apache,IIS),您使用的Web技术(ASP.NET,PHP,Ruby,node.js)或你使用的框架(laravel,symfony,wordpress,ruby on rails)。所以很难准确。
反正。
例如,在IIS上,您可以选择以这些方式存储会话状态:
对于在Linux上运行的Apache / PHP,您可以跨机器对会话文件夹进行rsync,或者将会话状态存储在数据库中。
作为最后的手段,您可以拥有一个连接Web服务器的受保护的websocket,并允许它们查询其他有关会话令牌的内容。
应该清楚的是,客户端可用的会话ID(cookie,本地存储或其他)不是Web服务器使用的会话状态。这是两件不同的事情。
您想要的是 SSO (单点登录)。
要明确:您必须直接在服务器之间移动信息,而无需客户端的帮助。出于安全原因,这一点很重要,不应与客户端可用的会话ID混淆。
此外,存在跨域问题。这仅适用于两个服务器的域(URL)不同的情况。出于安全原因,您无法将一个域的cookie发送给另一个域。或者从另一个已加载的页面访问另一个域的本地存储。换句话说,当您在一个域下的cookie或本地存储中设置会话ID时,它将无法在另一个域上访问。
但是围绕域边界有一种方法,如下所示。
在您的情况下,数据库可能是最佳选择。你可以这样做。
当您将客户端从一个域(服务器)重定向到另一个域时,您必须确保传递会话ID(没有cookie或本地存储) - 您可以通过放置会话ID轻松实现到URL的查询字符串中,例如:
www.otherdomain.com/landing_page.html?sid=75UFNE784324jEJIRO4234782394JKR
在另一台服务器的登录页面上,您现在可以获取该会话ID,根据SQL表查询它并检索该服务器的登录信息。
我希望这会对你有所帮助,这可能有点令人困惑,因为它是没有具体代码的通用解释。但是要注意一点,你应该能够做到!