2010-04-08 119 views
9

我已阅读其他问题,他们主要讨论这样做的安全性。这不完全是我的担心,主要是因为网站的问题是基于浏览器的游戏。然而,更大的问题是用户 - 并不是每个用户都足够了解OpenID。当然,RPX使得这非常简单,这就是我将要使用的,但是如果用户在Google或Facebook等账户中没有账户,或者不相信系统使用现有账户登录会怎样?他们必须得到另一个提供的帐户 - 我相信大多数人都知道如何这样做,更不用说打扰了。使用OpenID作为唯一的身份验证方法

还有如何在应用程序中管理它的问题。用户可能希望将多个身份用于单个帐户,因此它不像用户名+密码那样简单。如何将用户的OpenID标识存储在数据库中?使用OpenID也给我带来了好处:RPX可以提供广泛的配置文件信息,因此我可以预先填写配置文件表单并要求用户根据需要进行编辑。

目前,我有这样的:

Users: 
------ 

ID  Email    Etc. 
--  --------------- ---- 
0  [email protected]  ... 
1  [email protected] ... 

UserOpenIDs: 
------------ 

ID  UserID  OpenID 
--  ------  ------ 
0  0   0 
1  0   2 
2  1   1 

OpenIDs: 
-------- 

ID  Provider Identifier 
--  -------- ---------------- 
0  Yahoo  https:\\me.yahoo.com\bob#d36bd 
1  Yahoo  https:\\me.yahoo.com\alice#c19fd 
2  Yahoo  https:\\me.yahoo.com\bigbobby#x75af 

有了这些外键:

UserOpenIDs.UserID -> Users.ID 
UserOpenIDs.OpenID -> OpenIDs.ID 

是不是正确的方式OpenID的标识符存储在数据库中?我如何匹配标识符RPX给我一个在数据库中登录用户(如果标识符是已知的)。

因此,这里有具体的问题:

  • 我将如何使它访问没有一个OpenID用户或不想使用它? (安全问题比如说,以他们的Google帐户登录为例)
  • 如何将标识符存储在数据库中? (我不确定上述表格是否正确)
  • 我需要采取哪些措施来防止某人以其他用户的身份登录并愉快地使用其帐户进行操作? (据我所知,RPX通过HTTP发送标识符,所以任何人需要做的只是以某种方式抓住它,然后将其输入到“OpenID”字段中)
  • 使用OpenID时还需要注意什么?
+0

嘿那里,新的OpenId我自己,但考虑它在我自己的网站。到你的第三个问题“措施......以防止某人以另一个用户身份登录......”,正如我所了解的OpenId,你从不**接受来自不可信来源的OpenId网址。在实施过程中,您的网站承载提供商的登录信息,提供商的网站直接与您联系**,因此您始终接受来自受信任网站的OpenId网址。 – 2010-04-08 17:42:23

回答

4

使其成为访问

没有一个OpenID首先涉及的用户,你可以做一个小网页,其中介绍了如何创建一个帐户(或者甚至指向一些供应商)。这样,创建一个OpenID帐户并不比普通帐户更难。

对于不想使用OpenID的用户,您有两种选择。 第一种:在您的OpenID登录旁边实现旧式登录,并让用户选择他们想要的方法。 第二个是只有OpenID ...这简化了你的工作。 说有些用户更信任网站不是一个值得信赖的OpenID提供商登录,在我看来是很奇怪,因为OpenID提供经常使用加密连接,等等

在数据库中存储

建议的模式约翰尼克是你所需要的。 (我不知道为什么你存储的网址,而不是反斜杠反斜杠的)

您可能需要在使用前一定要规范你的URL这样就可以避免像http://openid.test.com/abchttp://openid.test.com/abc/事情,不同的URL被处理。

额外措施采取

无。 您应该只使用http://openid.net/developers/libraries的图书馆。

确认用户的身份是提供者的问题。 只有用户和网站知道该帐户的密码。

如果有人有你的OpenID URL (这是公开的),他仍然需要密码(或另一种鉴定方法,如SSL证书)才能登录。

+0

我使用了反斜杠,因为这是RPX通过他们的API给我的。只要它一致就没有关系。至于图书馆,我将使用RPX,它具有一致的API和一个不错的用户界面。 – CMircea 2010-04-19 18:13:57

+0

谢谢,我只是想知道为什么和如你所说的问题是有一致的事情。 – Kru 2010-04-19 22:05:33

-1

我注意到一个回答第一个问题:

如果用户不能或不想使用OpenID的,合作伙伴与现有的供应商,直接在网站上报名参加他们,或成为提供者自己(尽管这意味着拥有经典的用户名和密码帐户,并且缺少问题点 - >仅使用OpenID)。

3

Arg,回答以上我以前的评论。

对于第三个问题“措施......以防止某人以其他用户身份登录......”,据我了解OpenId,您从未接受来自不可信来源的OpenId网址。在实施过程中,您的网站托管供应商的登录信息,供应商的网站直接与您联系,所以您始终接受来自受信任站点的OpenId Url。

换句话说,即使恶意用户收集像宠物小精灵一样的OpenId,他们也无法访问您的系统。

对于第二个问题“我该如何存储...”,您的模式将起作用,尽管它看起来有点放松。例如,通过使用多对多映射[即UserID to OpenID],您允许用户属于多个OpenId,并且一个OpenId属于多个用户。你想要没有后者的前者。

一个简单的外键约束就足够了。

UserID  Email   
------  --------------- 
86000  [email protected] 
86001  [email protected] 

UserID  Identifier 
------  ---------------- 
86000  https:\\me.yahoo.com\bob#d36bd 
86000  https:\\me.yahoo.com\bigbobby#x75af 
86001  https:\\me.yahoo.com\alice#c19fd 

提供UserID是一个外键Users表上有Identifier唯一键约束,这实质上指明了User拥有零或许多独特Identifier秒。原则上,我可能会在该桌上打一个主键,但这是肉汁。

希望这有助于:)

PS如果您有关于整合或利用的OpenID的疑惑,然后通过实施步骤。识别在OpenId Url中的所有源代码,然后问问自己是否有可能让恶意用户访问该入口点。我希望只有一个这样的入口点,除了可信的OpenId提供者之外,其他人都无法访问它。

+0

我忘记了第二个表中的UserID。固定。 – CMircea 2010-04-08 19:57:09