2009-11-12 51 views
21

我是openID中的新手。我花了很多时间思考最佳做法是如何让用户选择使用各种支持OpenID的帐户进行登录。OpenID:如何最好地将多个OpenID帐户关联到一个用户?

(我必须进一步澄清,我的系统不是一个只需要一个简单的“一次性身份验证”来发布博客的系统,而是一个像社交网络站点这样的完整系统,用户将始终添加更多信息和编辑现有的“个人账户”制度本身的信息...所以需要有某种将与用户所从事的工作相关联,“账”。)

鉴于我不是这样的创建一个“密码和用户名为mysite的专用用户帐户”,只依赖openID登录我遇到了以下问题: 当用户“A”通过“Google帐户”登录(第一次)时,他所做的一切将与Google帐户相关联。当他回来并且没有点击“Google帐户登录”而是“雅虎登录”时,他将登录,但会创建/获取与雅虎相关的新帐户。他对Google帐户所做的一切似乎都已丢失。简单地向每个用户发布一个“openID独特和唯一的用户名”(不带密码)在我的网站上不起作用:就像我登录时要求这个唯一的用户名(没有密码),每个人都可以猜测其他用户的用户名并将OpenID跟他们。但是如果我还必须为这个用户名设置一个密码,那么我比以前在没有openID的情况下结束了我们的工作。然后,我必须向用户发出某种“主帐户”(包括usernam和passwort)为方便起见,可以关联任何数量的openId帐户。但在这种情况下,我比openID有什么理由?由于用户必须记住“我masterpassword和用户ID”反正...

=>这是否意味着,这OpenID的不“直接”支持多帐户的“自由选择”?如果我希望用户能够使用任意openID用户帐户登录(对于每一次登录),这是这样做的唯一方式:

1.)用户通过“已知的openID帐户“=>这是没有什么必须做

2.)用户通过”未知的openID帐户“=>”认证“用户通过”未知“openId(例如雅虎)认证用户,但当用户是回到我的页面,向用户说明,这个(雅虎)openID帐户是未知的(=没有进一步的工作与它相关联=它像一个新帐户)并询问,如果他可能通过其他帐户上次登录并提供支持的openID帐户列表。然后用户可以选择他上次使用的提供商之一(例如Google)。然后,他除了已经登录(与雅虎)之外,还必须登录他上次使用的“旧”(Google)帐户。这两个帐户然后“相互关联”,现在还可以通过较新的(Yahoo)openID帐户/登录访问旧版(Google)帐户上的任何工作?

或者是否有任何其他方式支持“一个USERACCOUNT”的“多个openID帐户”?我之所以这么问:OpenID对于普通用户来说还不是很了解,如果我打印一个包含Google登录信息的大型列表,Yahoo to Faceebook,那么会有很多用户使用Google首次登录,但下一次他们回来时可能会选择Facebook(因为他们刚刚离开了Facebook网站,并且更加吸引人,点击了facebook图标),这就是“网站在过去15年中如何运作”:只有一种方法可以登录:一个用户名输入字段和一个密码输入字段如果我现在打印一个帐户的巨大列表,其中每个用户都有一个帐户,一天不理解这将导致的问题,所以理想的世界将是,用户可以通过我的openID提供商列表的任意帐户登录,并将所有帐户“相关联”,彼此...

我希望我很难描述我的问题是什么。

我真的很感谢您的帮助和想法(mybe我在这里完全误解的东西)

谢谢合租了! Jan

回答

7

OpenID是一种认证机制,而不是配置文件存储机制。您应该为网站上的人员保留一个唯一的标识符,并且应该保存一条记录,该记录存储与该唯一标识符相关的OpenID,方法与存储与该唯一标识符相关的密码的方式相同。

+0

您好杰里米,谢谢您的回答。 但是我在实践中如何将多个帐户的唯一标识符相关联?要做到这一点,唯一的方法是将唯一标识符的密码(=>拥有某种完整的masteraccount)或按照上述方式进行关联。但是,如果我发出某种“masteraccount”,那么OpenID是只是一些“有趣的小工具”,因为用户必须仍然记得我唯一IDENTIFER和密码。否则,不可能将多个openID帐户“安全”地彼此关联。 – jan 2009-11-12 18:11:16

+0

您的认证模型应该只是:一个_authentication model_。它不应该规定你如何管理用户,只是你如何验证他们。您需要一个唯一标识符(UID),它允许您准确确定哪个用户连接到系统。即使SO使用它们生成的UID(例如65228),并且它们存储OpenID和它们的UID之间的连接。您遇到的问题是因为您将OpenID用作UID。今天知道使用Facebook的用户的唯一方法就是和Google昨天使用Google的用户相同,即让他们先登录Google。 – 2009-11-12 20:50:35

2

看起来好像你必须让用户登录以将它们连接在一起。

6

在您的数据库中有一个用户帐户表,其中包含用户标识 ,并有一个链接表,将OpenID链接到用户标识。

表的用户

ID NAME

1 PIET

2 KEES

表的OpenID

OPENID USERID

的http:// ..... 1

的http:// ..... 1

的http:// ... .. 2

的http:// ..... 2

+0

你好grombeestje,谢谢你的回答。如果你能详细说明你将用户表与特定用户的开放idtable关联的方式,那么你会友好些:我在我的问题中描述的方式,还是你提出了更好的解决方案? – jan 2009-11-12 18:16:10

14

是,用户将有两种登录。

  1. 用户首次使用Google帐户登录,使用该应用并注销。应用程序创建一个内部用户登录(在grombeestje的表用户中)并将其与Google帐户相关联。 (在grombeestje的openid表中)
  2. 后来,用户登录了雅虎并再次用雅虎帐户登录。现在向用户提供一步以识别其他服务以及
    • a。用户选择并选择Google帐户。
    • b。用户使用Google帐户登录。
    • c。应用程序会将Google ID添加到当前登录名中。

此外,任何时候当用户希望他可以选择登录添加到他的个人资料,并确定他/她的其他的OpenID如Blogger,Facebook的等等。如果他使用这些帐户创建了不同的登录名(在grombeestje的表用户中),那么他可以使用应用程序删除本地登录名之一(在grombeestje的表用户中),或者将它们合并为一个。

+0

很好的回答!首先你真的回答了这个问题。其次,在最后一段中提到了将两个内部账户合并在一起的责任,如果他们在最初登录后晚些时候联系在一起。我需要考虑一些事情。谢谢! – TalkLittle 2011-09-15 13:02:19

+0

谢谢TalkLittle! – SarjanWebDev 2011-09-30 05:47:21

相关问题