我已经阅读了其他问题,他们大多谈论这样做的安全性。这并不完全是我关心的问题,主要是因为该网站的问题是基于浏览器的游戏。然而,更大的问题是用户 - 并不是每个用户都有足够的文化来理解 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
使用这些外键:
UserOpenIDs.UserID -> Users.ID
UserOpenIDs.OpenID -> OpenIDs.ID
这是在数据库中存储 OpenID 标识符的正确方法吗?我如何将 RPX 给我的标识符与数据库中的一个匹配以登录用户(如果标识符已知)。
所以这里有一些具体的问题:
- 如何让没有 OpenID 或不想使用 OpenID 的用户可以访问它?(例如,使用他们的 Google 帐户登录的安全问题)
- 如何将标识符存储在数据库中?(我不确定上面的表格是否正确)
- 我需要采取哪些措施来防止某人以其他用户身份登录并愉快地使用他们的帐户做任何事情?(据我了解,RPX 通过 HTTP 发送标识符,所以任何人都需要做的就是以某种方式获取它,然后在“OpenID”字段中输入它)
- 使用 OpenID 时我还需要注意什么?