例如:
- 我们在两个域上运行两个社区站点(称它们为
example.com和example.net)。 - 我们希望以后能够将其扩展到更多域。
- 我们希望允许多种类型的登录(OpenID、Facebook、Twitter、标准用户名/密码)。
- 我们希望登录到一个站点的人自动登录到其他站点。
换句话说,它有点类似于 StackExchange 网络。
在这种情况下,这个计划会奏效吗?
- 设置
example.com和example.net(以及任何后续添加)作为 OpenID 依赖方,仅接受 OpenID 登录id.example.org。 - 设置
example.com并example.net在您第一次访问它们时执行 OpenID 立即回复请求,这样如果您已登录,id.example.org您将立即并自动登录到您正在访问的站点。如果您没有登录,他们应该设置一个 cookie,以保存他们在每个页面请求上执行此操作。 - 设置
id.example.org为 OpenID 提供者和消费者。它还应该使用 Facebook 和其他身份提供商,并允许标准的用户名/密码访问。(多个登录方法可以附加到一个帐户。) - 注销时,只需更改数据库中的身份验证令牌。用户仍将拥有 cookie,但它们将毫无意义。因此,用户可以同时退出所有站点。一次可以针对一个用户存储多个身份验证令牌(并且每个站点应该不同),以便用户可以在一个浏览器中注销,但仍可以在另一个浏览器中登录。退出始终退出所有站点。
我在上面看到的唯一问题是:
- 有人来访
example.com。设置了“未登录”cookie。 - 齐然后继续
example.net。同上。 - 然后 Zie 登录并继续浏览
example.net。 - Zie 然后返回,
example.com并且由于“未登录”cookie,未进行检查id.example.org,因此未登录。 - 但是,只要 zie 单击“登录”按钮,zie 就会登录。
我不认为这是一个大问题。
总的来说,我认为这是一个非常好的系统。我只是想看看它被审查。有没有我没有预见到的问题?它会是错误的还是缓慢的?StackExchange 使用了一种非常不同的方法。我认为他们有充分的理由这样做?