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.用户自行访问百度
OAuth2.0 第三方登录相关推荐
- [OAuth2.0三方登录系列文章-1]OAuth2.0与三方登录的端到端方案
系列文章 [OAuth2.0三方登录系列文章-1]OAuth2.0与三方登录的端到端方案 [OAuth2.0三方登录系列文章-2]如何设计基于OAuth2.0的授权登录SDK以及竞品分析 [OAuth ...
- OAuth2.0授权登录
OAuth2.0授权登录 最近工作中遇到了多系统间的授权登录,对OAuth2.0进行了学习研究,并总结备忘. [场景] 我们登录一些论坛等网站的时候,如果不想单独注册该网站账号,可以选择用微信或QQ账 ...
- 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现)
微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 文章目录 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 准备工作 开发思路 具体代 ...
- Java实现第三方登录--OAuth2.0新浪微博登录接入(二)
目录 一.完成微博平台应用注册,获取参数 1.登录微博开发平台. 2.开发者认证 3.创建应用 3.1 选择网站接入 3.2 立即接入 3.3 创建新应用 3.4 完善应用的基本信息和高级信息 二. ...
- GitLab 配置 OAuth2 实现第三方登录,简直太方便了!
点击关注公众号,实用技术文章及时了解 需求提出: 公司内部已有一套oneid用户中心,需要支持登录gitlab. 实现 GitLab支持配置第三方登录, 修改配置文件gitlab.rb: vi /et ...
- OAuth2.0 社交登录-Gitee springboot项目整合(微服务分布式)完整代码包括 数据库、前、后端
文章目录 社交登录(Gitee) 1.模拟请求 项目整合 1.数据库增加字段 2.前端 2.后端 社交登录(Gitee) 完成这个踩了很多坑,包括第一时间忘了浏览器缓存这回事以及微博一些平台申请社交登 ...
- OAuth2.0第三方授权
第一章.OAuth2.0 介绍 OAuth认证 OAuth认证是为了做到第三方应用在未获取到用户敏感信息(如:账号密码.用户PIN等)的情况下,能让用户授权予他来访问开放平台(主要访问平台中的资源服务 ...
- oauth2.0 注销登录再次访问authorize授权接口会跳过登录页面问题解决
[重要提示,该种做法纯属技术理解和技术探索,禁止用于生产环境!因为违背了oauth2.0自动认证的宗旨!会导致无法自动登录问题] [禁止用于生产环境] [禁止用于生产环境] [禁止用于生产环境] [禁 ...
- 淘宝 OAuth2.0 的登录验证与授权
最近老板有意与淘宝合作,网站需要支持淘宝登陆验证与授权,所以研究了下淘宝的第三方登陆,基于OAuth2.0(其实也没啥好说的,原理都一样,主要是一些细节).写blog的原因是当时研究这玩意是发现文档只 ...
最新文章
- 我的计算机书籍创作心得
- 2.3.5 用信号量实现 进程互斥 同步 前驱关系
- c语言将0到1十等分放入数组,C语言课程设题计目汇总.doc
- 动态规划,从例子到理解
- 第七课 ActionScript 3语言进阶一
- Hibernate锁定模式– PESSIMISTIC_READ和PESSIMISTIC_WRITE如何工作
- SAR图像变化检测的评价方法
- CV Code | 本周新出计算机视觉开源代码汇总(含图像修复、目标检测、医学图像分割、度量学习等)...
- docker安装hbase
- Windows Terminal 已上架,快尝鲜
- Linux如何查看哪个进程占用的SWAP分区比较多
- 基于SSM+MySQL的实现的汽车门店管理平台系统
- 铨顺宏RFID:电子汽车车牌系统具有RFID识别功能
- mybatis-plus调用自身的 selectById 方法报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You hav
- 计算机教师专业发展规划,信息技术教师个人成长计划
- 欧几里得 拓展欧几里得算法 讲解 (Euclid Extend- Euclid Algorithm)
- android 模拟器监听短信,android模拟器用命令和DDMS模拟来电和短信
- 解读ORACLE数据库的统一命名与编码规范
- winter 老师前端面试直播总结
- 解决”您的连接不是私密链接“的问题!
热门文章
- echarts-王者荣耀雷达图
- bzoj5334 [Tjoi2018]数学计算(线段树)
- 一个javascript 滑竿控件
- python 强制结束线程
- CPU架构简介(ARM、X86/Atom、MIPS、PowerPC)
- android 实时虚化,实时虚化如何实现?详解红米Pro双摄原理
- 阿里半跪过,任正非差点跳楼,京东被骗光钱:成年人的生活哪有容易二字?...
- 吐槽大会4_吐槽大会4嘉宾名单已出 网友第一反应就是我诞总呢
- pg数据库(PostgreSQL)与gp数据库(GreenPlumSQL)的区别与联系
- Pytorch:核心模块,torch.nn与网络组成单元