IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> OAuth2.0 第三方登录 -> 正文阅读

[网络协议]OAuth2.0 第三方登录

本篇内容以用户访问百度,通过新浪微博的第三方登录百度过程讲解

用户:资源拥有者
百度:客户端
新浪微博:认证服务器

前置条件: 百度已经向新浪微博申请注册,分配给百度的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.用户自行访问百度

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:56:55  更:2022-03-24 00:58:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:58:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码