使用OpenID作为唯一的身份验证方法

CMi*_*cea 9 openid rpx rpxnow

我已经阅读了其他问题,他们大多谈论这样做的安全性.这并不完全是我的担心,主要是因为该网站的问题是基于浏览器的游戏.但是,更大的问题是用户 - 并非每个用户都有足够的文字来理解OpenID.当然RPX使这很容易,这就是我将要使用的,但是如果用户没有Google或Facebook上的帐户或者不信任系统使用现有帐户登录该怎么办?他们必须在另一个提供帐户 - 我相信大多数人会知道如何去做,更不用说为此而烦恼了.

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

我目前有这个:

Users:
------

ID     Email              Etc.
--     ---------------    ----
0      bob@yahoo.com      ...
1      alice@yahoo.com    ...

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
Run Code Online (Sandbox Code Playgroud)

使用这些外键:

UserOpenIDs.UserID -> Users.ID
UserOpenIDs.OpenID -> OpenIDs.ID
Run Code Online (Sandbox Code Playgroud)

这是在数据库中存储OpenID标识符的正确方法吗?我如何匹配RPX给我的标识符以及数据库中的标识符以登录用户(如果标识符已知).

所以这里有具体的问题:

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

Kru*_*Kru 4

使其易于访问

首先,对于没有 OpenID 的用户,您可以制作一个小页面来解释如何创建帐户(甚至指向某些提供商)。这样,创建 OpenID 帐户并不比普通帐户更难。

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

存储在数据库中

johnny g提出的模式正是您所需要的。(我只是不知道你为什么用反斜杠而不是斜杠存储 URL)

您可能需要在使用 URL 之前对其进行规范化,这样就可以避免http://openid.test.com/abchttp://openid.test.com/abc/等内容被作为不同的 URL 处理。

需要采取的额外措施

没有任何。您应该只使用http://openid.net/developers/libraries中的库。

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

如果某人拥有您的 OpenID URL (公开的),他仍然需要密码(或另一种身份验证方法,例如 SSL 证书)才能登录。