您好,匿名用户
随意问技术百科期待您的加入

纯OpenID登录的网站如何解决帐号一系列相关问题?

0 投票

想做个纯OpenID登录的网站,类似stackoverflow的登录,但是思考几个问题没找到解决方案

  1. 如何避免不同OpenID创建了不同帐号?(UI提示引导?技术实现?)
  2. 我猜测segmentfault实际还是创建了一个本地帐号(OpenID登录后要求输入的邮箱),但是用邮箱做本地帐号唯一标识是否是最佳实践?是否有其他更好的方案?
  3. 这类纯OpenID登录的网站设计上还有什么坑在里面?

目前我准备实现的方案:

  1. 用户正常注册,用户名/密码/邮箱
  2. 登录后才允许进行OpenID关联到本地帐号
  3. 一旦有OpenID关联后,用户可以选择关闭本帐号的用户名密码登录功能(但是保留密码hash在本地,以免第三方OpenID服务失效)
用户头像 提问 2012年 12月1日 @ Dr. Mundo 上等兵 (281 威望)
编辑 2012年 12月1日 @Saber
分享到:

1个回答

0 投票

先普通注册登陆再绑定就失去OpenID/Oauth的意义了,OpenID/Oauth本来就是为了简化注册登陆设计的。

先说注册/登陆

一般来说依赖第三方的注册登陆都需要以下的步骤:

1. 用户点击第三方登陆
2. 跳转到第三方认证
3. 网站检验认证信息,同时让用户选择: 新注册帐号 或 绑定已有帐号
4. 如果用户选择新注册帐号,一般需要填写Username/Email,不需要填写密码
5. 如果用户选择绑定,则需要验证密码或者用邮件验证

要点在于,使用了第三方登陆的用户,都不需要密码验证

之所以有Step3,是因为大部分第三方网站都不会提供用户的Email,如果你的网站不需要Email,那么上述过程可以简化为

1. 用户点击第三方登陆
2. 跳转到第三方认证
3. 系统检测认证信息,同时自动创建用户,用户名可以根据验证信息生成,比如Weibo-AlloVince等,只要保证不重复就可以。

上面的简化步骤才是真正理想的第三方登陆。

----

注册以后系统还应该提供

- 解除绑定
- 重新绑定

的功能。

技术要点有:

- 由于已经是注册好的用户,绑定只是跳到第三方的验证过程,无需用户再输入任何信息。
- 没有填写Email/Password的用户不能解除最后一个第三方帐号的绑定,否则这个帐号会变成死帐号,没有任何方法可以登陆。
- 可以将一个第三方认证从一个帐号重新绑定到另一个帐号。

----

事实上坑还有很多。

假如是Oauth2.0, Token会有过期时间,Token过期后需要发送邮件提醒用户重新绑定。

每个第三方提供的用户信息都不一样,所以需要一个统一的转换接口,将第三方回传的信息转化为自己系统的格式,这样用户信息才能得到利用。

第三方的用户信息存在更新问题,需要后台定期携带Token访问更新。

所以想要完美的集成第三方登录,其实工作量是非常恐怖的。

用户头像 回复 2012年 12月1日 @ Veigar 上等兵 (210 威望)
提一个问题:

相关问题

0 投票
1 回复 45 阅读
0 投票
1 回复 55 阅读
0 投票
1 回复 40 阅读
用户头像 提问 2012年 12月1日 @ Artemis 上等兵 (162 威望)
0 投票
1 回复 37 阅读
+2 投票
1 回复 261 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...