在多个网站中使用相同的登录信息,实现透明的登录过程。

4

问题

假设我有example.com,example.org和example.net这三个网站。

所有这些网站都有一个登录系统,用于验证同一组用户凭据。

我正在寻找一种有效的方法,只需要在一个地方登录,但仍然可以透明地登录到其他网站。

我的当前解决方案
...是使用iframe加载其中一个网站(我称之为主站点)上的资源,如果用户已经在主站点登录,则使用令牌刷新页面并通过JavaScript自动登录用户。

但是,由于以下几个原因,这种方法非常低效和不安全:

  • 用户需要在主站点登录
  • 用户需要刷新页面,使用某些客户端代码(我知道这可能无法避免)。
  • 通常不建议使用iframes,甚至有一些浏览器插件会阻止这些内容。

想要的解决方案
我不想使用Facebook、Google或OpenID提供商等第三方服务提供商,因为这将要求我的用户在第三方网站上注册才能使用我的服务。

总结具体问题
就像Google和StackOverflow一样,网站认证之间的过程似乎是透明的,我需要类似的东西。有没有更好的选择来替代我的当前解决方案?


1
获取您自己的 openID 如何? - Benjamin Gruenbaum
此外,查看以下链接: https://dev59.com/xXVD5IYBdhLWcg3wO5AD - Benjamin Gruenbaum
@BenjaminGruenbaum 看起来处理自己的OpenID提供程序并不简单,除了使用JanRain臃肿的解决方案外,似乎没有人为PHP创建最新的解决方案。 - Repox
@Repox,解决你的问题并不那么简单,有什么好的解决方案吗? - Boris Guéry
顺便说一句,对我来说拥有自己的OpenID似乎是最好的解决方案。 - Boris Guéry
1个回答

4

我不能分享代码...但是我实施的解决方案涉及一个中间人来处理所有我的站点的身份验证,我们称之为SSO Broker。

基本上,所有的登录请求都经过SSO Broker,它将确定在尝试访问siteb时您是否已经在sitea中登录。

...我能指向的最接近我们实现方式的是: http://www.jasny.net/articles/simple-single-sign-on-for-php/

其他的SSO解决方案也都有其用武之地,但有些比所需更加复杂。

另一种简单的方法是,只需在彼此之间传递一些(相对安全的)令牌。


当用户从example.com移动到example.org时,您如何消除用户登录的需求?我认为用户仍然需要在example.org上输入用户名和密码,但可以在公共OpenID服务器上进行验证。 - HaBo
@HaBo 你试过 Jasny 的代码了吗?它似乎能正常工作。 - kojow7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接