第三方登录流程解析(基于oauth2.0)
oauth2解决的问题是你在上网登录一个客户端的时候,可能客户端比较小众,不受你的信任,你不放心把密码安全的交给他,这个时候就可以使用第三方登录来解决问题,通过一个你信任的网站,让客户端通过这个网站来得到你的基本信息,从而避免了密码模式的信息泄露问题。
这里我们拿百度网盘和qq作为例子,我们的目的是使用qq作为第三方登录百度网盘,总结出以下几个流程:
1)首先,客户端访问百度网盘的登录界面,点击第三方登录。
2)百度网盘重定向到qq服务器,让用户输入账号和密码,除此之外还需要提供clientid,callback之类的参数,这些参数可以看作是担保参数,是需要通过正规渠道申请的,qq就去qq的平台,微信就去微信的平台。
3)qq验证账号密码并且生成tokan响应到百度网盘后重定向到callback
4)百度网盘拿着token去访问qq服务器解析用户的参数,之后得到用户信息。
oauth2
oauth2的流程如上图所示,前俩步的授权许可呈现出来的形式是以clienid和cilentsecret,callback。。。的形式颁发给客户端的。
oauth2有四个角色:
1.资源所有者(你自己)
2.客户端,第三方(百度网盘)
3.资源服务器(qq的数据库)
4.授权服务器(qq)
下面介绍一种oauth2中用的最多的授权码模式。
大体流程(以上面的qq百度网盘为例zi)
1)打开百度网盘的登录界面,点击qq登录
2)跳转到qq客户端界面,同时带着特定参数
https://graph.qq.com/oauth2.0/show?which=Login&display=pc&client_id=100312028&response_type=code&redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3De67c5b007e2e4e3c532978e456cc5fd6a1dca048fa8e4d0197%26tpl%3Dnetdisk&state=1633744521&display=page&scope=get_user_info%2Cadd_share%2Cget_other_info%2Cget_fanslist%2Cget_idollist%2Cadd_idol%2Cget_simple_userinfo
上面是携带的部分参数,
3)点击确定授权之后,qq向百度网盘提供的callback发送一个信息,包含code=…,state=…,表明已经授权通过了。
4)百度网盘拿着code+clientid+clientsecret去qq获取token
5)qq验证通过之后发放token
6)百度网盘拿着token去获取用户信息。