一个账号走天下第三方登录解密
2019-10-30技术宅
技术宅
初步认识第三方登录
IETF为了解决上述第三方登录的问题,专门设立了OAuth工作组,该工作组的主要内容是设立开放授权的标准。
OAuth的初步标准,是允许第三方网站在用户授权的前提下,访问用户存储在服务商那里的各种信息,而这种授权无需将用户名和密码提供给该第三方网站。OAuth升级到2.0版之后,IETF将此标准进一步延伸,推出了专门解决第三方客户端使用身份认证问题的OIDC(OpenID Connect)協议。
目前很多网站使用的第三方登录,大部分是基于OAuth 2.0协议或OIDC协议。以知乎网站为例,在登录界面中切换到“社交帐号”登录,它即显示出支持使用微信、QQ或者新浪微博账号直接登录(图1)。点击相应的国标,比如新浪微博,就会转入新浪网站的认证界面,简单点击同意授权知乎使用部分信息之后,即可返回知乎网站登录、浏览了,十分方便。
①知乎网站的登录界面
账号通用——第三方登录背后的秘密
按传统方法登录一个网站,正常的流程是先在网站注册用户名和密码,网站会将用户的注册信息写入服务器数据库,这样用户再次登录时,网站会对用户输入的账号和密码进行校验,如果一致则允许登录。显然这种传统的方法需要我们在每个网站都要注册一个账号和密码(图2)。
第三方登录则将用户注册、账号验证和需要登录的网站分开,在第三方登录中主要涉及提供账号的服务商和需要登录的网站。以QQ账号登录“摄图网”为例,这里我们将提供服务的腾讯称为“第一方”,摄图网称为“第三方”(图3)。
②传统网站登录图解
③第三方登录完整流程图解
首先,当用户在第三方选择QQ登录时,需要登录的网站会通过第三方登录SDK向第一方平台发送登录请求。第三方登录SDK是提供授权服务的第—方网站开发的,比如腾讯针对旗下账号登录授权在https://connect.qq.com/manage.html#/提供开放接入功能,申请接入的网站只要按照腾讯的要求添加接入代码就可以使用开放登录服务。这样我们在摄图网登录界面点击QQ国标后,将会自动跳转到腾讯授权界面,这是向腾讯发送登录请求(图4)。
第—方平台接收到登录请求,它会先确认用户是否已经成功登录第一方平台的账户,如果“是”,则准备一键登录;如果“否”,则要求用户先手动登录第—方平台。可以看到在跳转到腾讯授权页面后,这里的页面会检测用户的QQ账号是否登录(图5)。
如果用户已经成功登录第—方平台账户,那么第一方平台会返回唯一的不变ID (OpenID)给第三方网站。比如在上述页面中,用户成功登录QQ后,这时腾讯就会向摄图网返回一个标识用户身份的ID。接着第三方网站会将这个ID储存到自己的服务器上,下次用户再次登录时只要校验这个ID是否正确即可。可以看到在摄图网的个人中心,用户名正是自己的QQ呢称,这就是一个典型的第三方登录实例(图6)。
⑥QQ登录摄图网
第三方登录的安全
从上文可以看出,第三方登录和传统登录方式完全不同。这里第三方网站的账号注册及密码验证是通过第—方网站已有的账号来完成的,第三方网站获得的只是第—方网站返回的用户信息ID而已。以上面的摄图网为例,它并没有取得实际的QQ账号和密码,所取得的不过是腾讯网站授权的部分用户信息。因为账号和密码信息都是保存在腾讯的网站上,所以即使摄图网被黑客入侵或者数据泄露,这里泄露的也只是和QQ账号对应的OpenID而已,从而有效地杜绝了“拖库”之类的事件所造成的损失。
当然,以上所谓的安全性,是基于第—方网站而言的,只有第一方网站的技术可靠,才有真正的安全可言。因此在使用类似QQ、微信账号登录其他网站时,一定要为自己的第一方账号设置一个强健的密码,否则这个密码的泄露,可能会导致自己的其他所有第三方网站隐私的泄露!
第三方登录是用户和网站的双赢
对于用户来说,第三方登录减少了自己记忆密码的负担,并且可以更好地保护自己账号和密码的安全。而对于网站来说,因为第三方登录账户和密码验证都是第一方完成,这样既可以减少用户数据的维护工作,同时还可以更好地扩展市场,比如支持QQ登录,那么理论上来说所有QQ注册用户都是自己的用户。用户得到了方便,网站减轻了资源负担,达到真正的双赢。