2016-07-07 50 views
0

我目前正面临以下问题:子域上的登录会话

一个主域名运行特定的PHP框架与框架特定的会话;现在有一个新的子域,它运行不同的PHP框架,我需要与子域共享来自主域的登录会话信息。即用户只能在主域上注册,但一旦登录,他们也将登录到他们在子域中的帐户。还应该注意的是,子域不能访问主域DB。

有了这些限制,我想出了以下解决方案:首先我将域cookie设置为.mydomain.com,这样我就可以访问子域上的会话cookie。接下来,我在主域上实现一个简单的API调用,它将返回登录状态以及其他会话信息。 API url将IP白名单限制在子域服务器上,并且一旦登录用户从主域名到达子域名,就会向用户cookie服务器侧(cURL假设)请求API url。一旦并且如果用户在子域上以这种方式被认证,则他被分配用于特定会话的令牌,并且从那里开始,我可以将其作为子域上的常规和单独的会话来管理。

现在我的问题是,您是否可以在此设置中看到任何安全智能漏洞?或提出任何改进或更可取的方法来做到这一点...

感谢

+2

顺便说一句,我写了一篇关于[无OAuth或SAML的跨域认证](https://paragonie.com/blog/2016/02/one-login-rule-them-all-seamless-and-secure交叉域认证),使用Halite。 –

+0

谢谢,这是一个有趣的阅读。从我所收集的内容来看,我描述的机制大致类似于您在博客文章中描述的内容,只是更简单(并且没有加密),再加上使用db存储的令牌来查找用户肯定更好。比共享从主域上的cookie。 –

回答

0

对于我来说,我想我会使用单点登录的概念。一旦用户通过任何域或子域登录,为该用户生成访问权限,即登录。 之后,使用相同的访问令牌来检查和验证用户不同的域名,而不是使用单独的会话。这可能会导致会话劫持并难以管理多个会话。一旦创建会话,分配访问令牌和访问规则。这将使登录过程无缝进行,并且易于管理。

欲了解更多信息,请查看搜索单一登录或OAuth 2.0协议。

+0

感谢您的建议,不幸的是,在当前的情况下实施这一做法并不现实,这就是为什么我选择了我的问题中描述的解决方案 –