本篇内容以用户访问百度,通过新浪微博的第三方登录百度过程讲解
用户:资源拥有者 百度:客户端 新浪微博:认证服务器
前置条件: 百度已经向新浪微博申请注册,分配给百度的client_id是2512457640
地址流程图如下
1.用户(资源拥有者) 访问百度(客户端)
2.点击新浪微博(认证服务器)登录, 浏览器(用户代理)跳转至新浪微博登录页面
百度跳转新浪微博,请求参数为
https://api.weibo.com/oauth2/authorize?
client_id=2512457640
&response_type=code
&redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3Df7ab38e47c1c6183b7e141c196e6f07d7428ecd21b9944f765%26tpl%3Dmn
&forcelogin=1
&state=1646642558
&display=page
&traceid=
参数 | 备注 |
---|
client_id=2512457640 | 客户端id | response_type=code | 认证类型, code是授权码 | redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fpho enix%2Faccount%2Fafterauth%3Fm key%3Df7ab38e47c1c6183b7e141c196e6f07d7428ecd21b9944f765%26tpl%3Dmn | 重定向地址, 用于认证成功/或失败后回跳百度的地址; | state=1646642558 | 状态,自行定义,后续需要原封不动回传; |
3.展示新浪微博(认证服务器)登录页面, 用户进行登录,默认是二维码登录
请求
https://api.weibo.com/oauth2/qrcode_authorize/generate?
client_id=2512457640&
redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3Dab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58%26tpl%3Dmn&
scope=&
response_type=code&
state=1646731217&
__rnd=
响应
{"url":"https://api.weibo.com/oauth2/qrcode_authorize/show?vcode=4ffaa0772c35b9af819c12296fbd001e&qr_url=https%3A%2F%2Fopen.weibo.cn%2Foauth2%2Fqrcode_authorize%3Fclient_id%3D2512457640%26redirect_uri%3Dhttps%253A%252F%252Fpassport.baidu.com%252Fphoenix%252Faccount%252Fafterauth%253Fmkey%253Dab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58%2526tpl%253Dmn%26scope%3D%26response_type%3Dcode%26state%3D1646731217%26vcode%3D4ffaa0772c35b9af819c12296fbd001e",
"vcode":"4ffaa0772c35b9af819c12296fbd001e"}
url值进行urlDecode
https://api.weibo.com/oauth2/qrcode_authorize/show?
vcode=4ffaa0772c35b9af819c12296fbd001e&
qr_url=https://open.weibo.cn/oauth2/qrcode_authorize?client_id=2512457640&
redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3Dab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58%26tpl%3Dmn&
scope=&
response_type=code&
state=1646731217&
vcode=4ffaa0772c35b9af819c12296fbd001e
redirect_uri值进行urlDecode
https://passport.baidu.com/phoenix/account/afterauth?
mkey=ab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58&
tpl=mn
4.新浪微博(认证服务器)授权成功/失败
失败暂且不讨论,如认证失败,新浪直接重定向redirect_uri, 后续流程结束;
5.新浪微博(认证服务器)授权成功
页面轮询查询授权状态接口
https://api.weibo.com/oauth2/qrcode_authorize/query?
vcode=4ffaa0772c35b9af819c12296fbd001e&
__rnd=1646731224042
响应
{"url":"https://api.weibo.com/oauth2/qrcode_authorize/show?vcode=b5d305c509a271090f8796cac4c4df60&qr_url=https%3A%2F%2Fopen.weibo.cn%2Foauth2%2Fqrcode_authorize%3Fclient_id%3D2512457640%26redirect_uri%3Dhttps%253A%252F%252Fpassport.baidu.com%252Fphoenix%252Faccount%252Fafterauth%253Fmkey%253Df7ab38e47c1c6183b7e141c196e6f07d7428ecd21b9944f765%2526tpl%253Dmn%26scope%3D%26response_type%3Dcode%26state%3D1646642558%26vcode%3Db5d305c509a271090f8796cac4c4df60"
,"vcode":"b5d305c509a271090f8796cac4c4df60"}
url值进行urlDecode
https://api.weibo.com/oauth2/qrcode_authorize/show?
vcode=b5d305c509a271090f8796cac4c4df60&
qr_url=https://open.weibo.cn/oauth2/qrcode_authorize?client_id=2512457640&
redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3Df7ab38e47c1c6183b7e141c196e6f07d7428ecd21b9944f765%26tpl%3Dmn&
scope=&
response_type=code&
state=1646642558&
vcode=b5d305c509a271090f8796cac4c4df60
6.回跳百度(客户端)页面, 重定向地址是redirect_uri(2步骤中)
https://passport.baidu.com/phoenix/account/afterauth?
mkey=ab2ab0542a50c028ddc3467d55819c6ed4db1b14f6ee132a58&
tpl=mn&
state=1646731217&
code=baf71815288d715502ec0072ca4b47d0
并且附带参数
参数 | 备注 |
---|
vcode=b5d305c509a271090f8796cac4c4df60 | 临时授权码, 拼接在redirect_uri后面 | state | 状态(2步骤中), 原封不动拼接在redirect_uri |
响应是一个html页面,此页面为过度页面, 目的是为后续流程的百度(客户端)后台请求新浪微博(认证服务器)后台, (步骤7, 步骤8) 此过程用户不可见,只为用户在前台提供过度页面
7.百度(客户端)收到回跳后, 通过后台请求新浪微博(认证服务器),申请令牌
附带参数
参数 | 备注 |
---|
grant_type | 授权模式,必选项,固定值为grant_type=authorization_code。 | code | 上一步的临时授权码,必选项,vcode临时授权码 b5d305c509a271090f8796cac4c4df60 | redirect_uri | 重定向URI,必选项,且必须与2步骤中的该参数值保持一致。用于验证。 | client_id | 客户端id,必选项。client_id=2512457640 |
新浪微博(认证服务器)收到请求,验证通过,向百度(客户端) 返回
参数 | 备注 |
---|
access_token | 访问令牌 | refresh_token | 更新令牌 | expires_in | 过期时间,单位秒 | token_type | 令牌类型,大小写不敏感,可以是bearer类型或mac类型。 |
说明此步骤服务器通讯,用户不可见。
8.百度(客户端)请求新浪微博(认证服务器),请求用户信息接口,或其他接口
接口请求头附带headers参数Authorization: access_token等信息
新浪微博(认证服务器)收到请求,验证通过,向百度(客户端) 返回 用户的唯一id, 头像,用户昵称,用户年龄等基础信息,但肯定不会包括用户登录新浪微博的密码
此用户信息接口为举例, 步骤8的过程可能是,百度(客户端)请求新浪微博(认证服务器)的其他接口,当然也可能请求多个不同接口,拉去用户信息,但每个请求肯定是附带access_token的凭证
9.百度(客户端)登录成功,用户自行访问
步骤7,步骤8, 过程过程处理完后,前端页面也会自动重新跳转,过度页面结束,例如跳转至百度首页。
10.用户访问一段时间后,由于百度(客户端)业务需要, 百度(客户端)再次需要请求新浪微博(认证服务器)
但是之前的access_token的过期时间expires_in,已经过期,重新请求获取新的access_token访问令牌接口
请求参数
参数 | 备注 |
---|
granttype | 授权模式,此处的值固定为granttype=refreshtoken,必选项。 | refresh_token | 更新令牌,必选项, 步骤7中的refresh_token的值 |
响应
参数 | 备注 |
---|
access_token | 新的access_token 访问令牌 | expires_in | 新的expires_in 过期时间,单位秒 |
说明此步骤服务器通讯,用户不可见
得到新的新的access_token, 可以继续重复步骤8的内容 说明此步骤服务器通讯,用户不可见
11.用户自行访问百度
|