0

我的公司有一个网络服务(abc.com),有一个自己的用户数据库,它工作得很好。现在我的公司想要添加一些额外的服务,这些服务位于与另一个域 (xyz.com) 完全不同的服务器上,但仍然使用来自 abc.com 的相同登录数据,因为我们可以完全控制它并且会有类似的像 xyz.com 这样的服务器,因此只在 xyz.com 上导入用户数据库是没有问题的。

我的第一个想法是在从 xyz.com 提交登录表单时使用来自 abc.com 的 checkuser.php,但后来我了解到会话 cookie 内容已绑定到域。至少我是这么理解的。

之后,我想通过 AJAX 和 HTTPS 访问我的 checkuser.php,并将通过 POST 加密的会话数据提交到 xyz.com。这也失败了,因为出于安全原因,AJAX 似乎不能跨多个服务器工作。

现在我没有想法,不知道如何使用我们的用户数据库安全地验证外国服务器上的用户。

4

3 回答 3

2

我会使用单点登录 (SSO) 而不是共享会话。这样,您就不会使站点代码相互依赖。如果您稍后决定更改其中一个站点上的某些内容,则不必担心会破坏其他站点上的功能,并且如果您选择在新站点中链接,则可以重用相同的解决方案。

更好的是有人已经为您制作了它,而且您可以自己创建的东西甚至可能更安全。

维基百科对 SSO 有一些很好的一般知识。另外,请查看 OAuth 和 OpenID。将这些术语与 PH​​P 结合起来,搜索应该会让您走上正轨。

于 2012-09-11T12:25:19.090 回答
0

另一种选择是简单地将 xyz.com 上的登录功能直接连接到 abc.com 的数据库以检查登录名和密码。然后,您将 xyz.com 的数据库用于其他所有内容。此外,如果您真的想要,您可以将会话信息存储在 abc.com 上的数据库中,而不是临时文件,那么您也可以从 xyz.com 访问该数据。是一个如何执行此操作的示例。

于 2012-09-11T12:41:02.683 回答
0

我使用 php 的时间不长,我自己也没有遇到过这个问题,但是,我一直在努力阅读书籍,并找到了一个可以帮助你的答案。

如果您只是尝试访问服务器 xyz.com 上的脚本和数据库,则可以使用以下函数从位于单独服务器 (abc.com) 上的脚本中使用其 url 或 IP 地址从字面上获取脚本的内容:

/* This example allows my example script on server mvc.com
to access the script on oreilly.com */
file_get_contents("http://oreilly.com");

由于您正在远程访问代码,而我在这里在黑暗中拍摄,我认为file_get_contents ( )将允许您通过服务器 xyz.com 上的脚本中的 $_POST 或 $_GET 方法设置变量并发送服务器 abc.com 上脚本的值。然后,您可以将这些变量存储在位于单个服务器上的 $_SESSION 变量中,该服务器处理原始 $_SESSION 变量和大部分处理。

It could become a quite complex 'game of catch' between the servers if you need to go back and forth frequently, but I think it may be a way around your problem if you can't move the data onto a single server. If you plan the structure of your scripts well this would allow you to store those $_SESSION variables all in a single place.

于 2012-09-11T12:45:13.147 回答