2017-06-16 26 views
2

我有一个网站,用户将登录到他/她的帐户,然后他们将被重定向到另一个网站,他们应该自动登录。这两个网站都可以访问相同的数据库。用户将通过令牌进行身份验证,但是如何将其传递给其他网站。将身份验证令牌从一个网站发送到另一个网站的最佳做法?

+0

通过标题发送 – Weedoze

+0

网站A是一个基于php的网站,而网站B是基于JavaScript的。那么如何在网站B上访问该令牌,或者有什么方法将该令牌与JavaScript一起传递? –

+0

他们都有权访问相同的后端? – Weedoze

回答

0

根据服务器技术的不同,有多种选择。你不知道你使用哪个平台(windows,linux)和你使用的是哪个web服务器(Apache,IIS),你使用的是哪种web技术(ASP.NET,PHP,Ruby,node.js)或者你使用的框架(laravel,symfony,wordpress,ruby on rails)。所以要精确很难。

反正。

例如IIS上,你可以选择存储在这些方面会话状态:

  • 是InProc模式,存储在Web服务器上存储会话状态。这是默认设置。
  • SQLServer模式将会话状态存储在SQL Server数据库中。这可确保在重新启动Web应用程序时保留会话状态,并使Web会话中的多个Web服务器可以使用会话状态。
  • 更多...

对于Linux运行的Apache/PHP可以rsync的会话文件夹跨机器,或者存储在数据库上的会话状态。

作为最后的手段,您可以拥有一个受保护的websocket,它可以连接Web服务器并允许其他人查询会话令牌。

应该清楚的是,客户端可用的会话ID(cookie,本地存储或其他)不是Web服务器使用的会话状态。这是两回事。

你想要什么叫做SSO(单点登录)。

要清楚:您必须在没有客户端的帮助下直接在服务器之间移动信息。这对于安全原因很重要,不应与客户端可用的会话ID混淆。

此外,还存在跨域问题。这仅适用于两台服务器的域(URL)不同的情况。出于安全原因,您不能将一个域的cookie发送给另一个域。或者从另一个已加载的页面访问另一个域的本地存储。换句话说,当您将会话ID设置在一个域下的Cookie或本地存储中时,它将无法在其他域中访问。

但是有域边界附近的方式,如下图所示。

在你的情况下,数据库可能是最好的选择。你可以做如下。万一你使用异质 -

    上您存储会话ID和指向这两个用户的登录数据(一个用于第一个服务器,另一个用于第二SQL表时间戳两边登录
  • 网络技术,如ASP.NET和PHP);
  • 当您将客户端从一个域(服务器)重定向到另一个域时,您必须确保会话标识符被传送(无Cookie或本地存储) - 您可以轻松地将会话标识放入URL的查询字符串,比如这个:

    www.otherdomain.com/landing_page.html?sid=75UFNE784324jEJIRO4234782394JKR

  • 你现在可以采取的会话ID,查询它针对SQL表并检索该服务器的登录信息在其他的服务器的目标网页上。

我希望这可以帮助你一点点,这可能有点令人困惑,因为它是一个没有具体代码的通用解释。但有一点关注,你应该可以做到!

相关问题