先普通注册登陆再绑定就失去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访问更新。
所以想要完美的集成第三方登录,其实工作量是非常恐怖的。