1

我想在我们拥有的管理应用程序中实现单点登录 (sso),但我想得到一两个提示。在我们当前的应用程序中,客户端使用典型的用户+密码组合登录我们的应用程序(验证码是可选功能)。

据我了解(如果我做得正确的话),您对 sso 所做的是“信任”身份提供者(即...... Google、Facebook、Yahoo!、Windows Live 等),因此客户端正在执行在外部页面中实际登录,然后它向我返回一个值,所以我知道客户端已由身份提供者验证。

在我看来,我想做这样的事情(zwibbler FTW!):

预期的身份验证机制

但是在我们当前的应用程序中,我们根据我们的数据库检查用户名和他/她的密码,这就是我对 SSO 的理解失败的地方......我如何将身份提供者返回的信息与我的用户数据相匹配?

或者更好地表达......我可以在我的用户帐户数据中使用哪些字段(如“典型”ala 用户、通行证、电子邮件等)来匹配外部身份验证?我担心这是一个商业应用程序,所以我想为用户提供使用他们自己的登录数据的能力,但我必须以某种方式将它与我们的数据相匹配才能让(或不)他/她登录,所以... 我该怎么做?

4

3 回答 3

2

作为一般设计,您将拥有以下表格

  • 用户
  • 角色
  • auth_OpenID
  • auth_Google
  • auth_Facebook
  • auth_Windows_Live

(将任何共享相同结构的身份验证表滚动到一个表中)。

users 表将识别系统上的所有帐户。角色表将识别您需要处理的所有权限集。然后 auth_* 表将包含远程登录所需的信息(例如 Google 帐户 ID 和身份验证令牌)。

然后,您在 users 表和其他每个表之间建立了多对多的关系。

如果有人使用未知的第三方身份验证系统登录,您会提示他们将其链接到现有帐户(在这种情况下,他们必须使用一组公认的凭据再次登录)或创建一个新帐户。

于 2012-05-13T18:47:47.380 回答
2

你有几个选择:

  • 推出自己的解决方案(不好玩)。
  • 使用HybridAuth 之类的解决方案。您需要几个额外的字段或一个额外的表来将每个提供者 + ID 映射到本地用户 ID。
  • 稍微改变策略,让一个完全独立的系统管理您的登录和权限分配(即标签),例如: 单点登录服务器/客户端

我非常偏爱最后一种方法。特别是如果您有多个不同的登录系统需要相互通信,或者您甚至预见到这种需求。

于 2012-05-14T12:50:27.437 回答
0

如果您使用电子邮件地址作为用户名,则可以这样匹配。不过,您可能仍然需要构建一个系统,通过该系统,经过身份验证的用户可以将他的用户帐户与其他身份验证提供者关联(同时仍处于登录状态)。如果你这样做,关系将是隐含的。

于 2012-05-13T19:33:06.923 回答