我有两个站点: example.com和exampletwo.com
我希望当用户登录到example.com时,他也会自动在exampletwo.com上进行身份验证
我该怎么做呢?我在第一个网站上使用Django + Nginx,在第二个网站上使用Tornado框架+ Tornado服务器。
谢谢;)
。
附注:如果你不知道这个平台( Django或Tornado或Nginx ),我也接受一个通用PHP+Apache平台的解决方案,然后我会做一些研究:)
发布于 2010-03-29 08:16:01
我会让在example.com上处理用户注册的代码立即向exampletwo.com发送https请求(当然,exampletwo.com会根据证书对其进行身份验证),意思是“使用这些凭据添加此用户”。这种方法似乎对任何两个web服务器/框架/语言都是可行的,只要它们能够发送和接收HTTPS请求并验证证书。
如果您无法对证书进行身份验证,则可以发送加密的"add this user“消息(只要两个站点可以共享用于加密的秘密)。这可能容易受到重放攻击,但如果您将时间戳作为“添加此用户”消息的一部分,则可以高度限制重放攻击的漏洞时间窗口,这可能足以使此方法可行。
如果你不能在两个站点之间安全地共享秘密,并不是所有的东西都丢失了:你仍然可以使用公钥加密。发送方用自己的私钥加密"add this user message“(当然包括时间戳),然后用接收方的公钥加密;接收方用自己的私钥解密接收的内容,然后用发送方的公钥解密。有点凌乱,也许有点慢,但在如此困难的约束下,它仍然可以完成是令人惊讶的;-)。
发布于 2010-03-29 08:31:56
假设两个网站都可以访问单个共享数据库,这可以通过两个网页访问表并检查用户是否已经登录来完成。我不熟悉Djano或Tornado,但如果上面的解决方案有问题,您可能希望公开一个网站的Web方法(Web Services),然后从另一个网站使用(调用) web方法。Cookie是不需要动脑筋的,因为它们依赖于站点。另一种方法是通过IP来跟踪用户,但是动态IP会带来很大的问题,并且可能被用来破坏安全性。
发布于 2010-03-29 09:14:39
问题是一个站点无法为另一个站点设置cookie。即使您在example.com上的登录代码要执行一个服务器到服务器的请求来告诉exampletwo.com用户已通过验证,也无法设置一个cookie来在用户实际访问exampletwo.com时传递此消息。
客户端证书是绕过这个问题的,但是如果这个双身份验证系统是为一般公众使用的,那么它就不是一个特别好的系统。大多数人会看到一些奇怪的请求(“你想添加这个证书吗?”)突然跳起来,尖叫着跑到山上。
解决方法是让example.com输出一些会导致用户从exampletwo.com加载某些内容的内容。一张图片,一大块javascript,等等。并在请求中放置加密令牌(<img src="http://exampletwo.com/login.php?remoteauth=ENCRYPTEDTOKEN">)。然后examplet2可以解密令牌,如果它的内容是正确的,并发送带有适当cookie集的图像(或您正在传输的任何内容)。
https://stackoverflow.com/questions/2535138
复制相似问题