首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在2个网站上进行身份验证和登录

问在2个网站上进行身份验证和登录
EN

Stack Overflow用户
提问于 2010-03-29 08:11:58
回答 3查看 255关注 0票数 0

我有两个站点: example.com和exampletwo.com

我希望当用户登录到example.com时,他也会自动在exampletwo.com上进行身份验证

我该怎么做呢?我在第一个网站上使用Django + Nginx,在第二个网站上使用Tornado框架+ Tornado服务器。

谢谢;)

。

附注:如果你不知道这个平台( Django或Tornado或Nginx ),我也接受一个通用PHP+Apache平台的解决方案,然后我会做一些研究:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-29 08:16:01

我会让在example.com上处理用户注册的代码立即向exampletwo.com发送https请求(当然,exampletwo.com会根据证书对其进行身份验证),意思是“使用这些凭据添加此用户”。这种方法似乎对任何两个web服务器/框架/语言都是可行的,只要它们能够发送和接收HTTPS请求并验证证书。

如果您无法对证书进行身份验证,则可以发送加密的"add this user“消息(只要两个站点可以共享用于加密的秘密)。这可能容易受到重放攻击,但如果您将时间戳作为“添加此用户”消息的一部分,则可以高度限制重放攻击的漏洞时间窗口,这可能足以使此方法可行。

如果你不能在两个站点之间安全地共享秘密,并不是所有的东西都丢失了:你仍然可以使用公钥加密。发送方用自己的私钥加密"add this user message“(当然包括时间戳),然后用接收方的公钥加密;接收方用自己的私钥解密接收的内容,然后用发送方的公钥解密。有点凌乱,也许有点慢,但在如此困难的约束下,它仍然可以完成是令人惊讶的;-)。

票数 1
EN

Stack Overflow用户

发布于 2010-03-29 08:31:56

假设两个网站都可以访问单个共享数据库,这可以通过两个网页访问表并检查用户是否已经登录来完成。我不熟悉Djano或Tornado,但如果上面的解决方案有问题,您可能希望公开一个网站的Web方法(Web Services),然后从另一个网站使用(调用) web方法。Cookie是不需要动脑筋的,因为它们依赖于站点。另一种方法是通过IP来跟踪用户,但是动态IP会带来很大的问题,并且可能被用来破坏安全性。

票数 0
EN

Stack Overflow用户

发布于 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集的图像(或您正在传输的任何内容)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2535138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档