我目前正在尝试加入不同域 example1.com 和 ex.example2.net 上的 2 个 Web 应用程序,以便您可以登录到 example1 并单击指向 example2 的链接并立即登录,因为这对客户来说更方便只需登录一次并在站点之间导航。
我研究了各种方法,即。php 会话、openID、JOSSO 和 Kerberos,但什么是实现此功能的安全且简单的方法?
我目前正在尝试加入不同域 example1.com 和 ex.example2.net 上的 2 个 Web 应用程序,以便您可以登录到 example1 并单击指向 example2 的链接并立即登录,因为这对客户来说更方便只需登录一次并在站点之间导航。
我研究了各种方法,即。php 会话、openID、JOSSO 和 Kerberos,但什么是实现此功能的安全且简单的方法?
Kerbros 非常广泛,适用于需要高安全性的系统。它很难使用,甚至只是设置,除非您非常了解 linux,并且如果您的托管服务提供商允许您通过机器进行这种类型的访问,否则我不会建议您使用这条路线。
但是,我对 JOSSO 或 openID 还不够熟悉,无法对它们进行很好的评论。
任何 php 会话都只对域有益,并且域所在的服务器,有点像 cookie,但不是,尽管你会使用它们。
如果两个站点位于同一托管帐户/服务器上,我认为您最简单的解决方案更是如此。就是要有一个专门针对这个原因的数据库。您要做的是像通常一样创建一个登录系统,但是您将有 2 个站点读取此登录信息。除了正常登录之外,您还将拥有一个会话跟踪表。通常,您已经在用户登录时设置了会话以使他们保持登录状态,并且您会在此处执行相同的操作,但是您需要在方程式中添加一个 cookie,两个站点都可以识别并使用该 cookie 来比较您跟踪的新表中的条目你的用户。我会说继续尝试通过 IP、浏览器,也许还有一个用户 ID,所有这些都在一个 cookie 中,具有某种唯一的哈希值,以及特定于用户的东西,基于只有服务器可以根据他们为用户拥有的信息重新创建的东西。
当然,我在概念上把它弄糊涂了,它比我想象的要复杂一些,但这将是你的一般垫脚石。
此外,如果站点彼此独立,您总是可以在它们之间创建一个 API 来来回传递 JSONP 样式的信息,这样一个站点就可以充当登录中心,而另一个站点只是验证
但总的来说,这完全取决于你想要做什么,如何,何时何地等。
您可以让一个应用程序使用 php 会话处理两个站点的登录。
example1.com 用户登录并存储 php 会话 cookie。
ex.example2.net 检查 example1.com 并验证会话 cookie。如果不存在重定向到 example1.com 登录页面或 example1.com 上的自定义登录页面。如果确实存在,则将用户登录到 ex.example2.net。
如果您只想要一个链接,那么您会生成一个哈希值,并在他们登录第一个应用程序后将其传递给第二个应用程序。如果哈希有效,则将它们登录。
如果它适合你,我的建议是去openID 路线。这是更简单的方法,并且足够安全。此外,注册过程对用户来说也更容易、更快捷。
如果您愿意,您实际上可以只允许来自您的登录域的 ID,使其几乎成为一个“私人”登录系统。
也有缺点...您无法很好地控制注册过程,您依赖于 openID 授权过程...如果您的主机配置不正确,可能会出现一些问题(例如时区差异) .
但总的来说,它是一个相对安全的系统,易于实施。
Kerberus 非常安全,但使用起来却是一场噩梦。除非您正在处理高度敏感的用户信息,例如信用卡号码,或者认为您的网站成为黑客攻击的诱人目标,否则我认为这不值得您花时间。
我会使用在两个站点之间共享的数据库表。如果您沿着 PHP 会话路线走,请不要尝试将会话数据从一个站点传递到不同域上的下一个站点,它将无法正常工作。很多个月前我发现这篇文章很有帮助:跨多个域的单点登录