OAth 2.0 的白话讲解
一、OAuth2.0是什么,主要做什么用的?
官方注解
简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。
白菜话
小明要访问我的网站,我想要保留用户的数据和操作保留粘黏性,所以我想要小明注册,然而小明很懒不想填写姓名邮箱什么的资料,顾客是上帝嘛,于是我就跟小明商量,咱们用你的qq账号登录好不好?小明同意了。然后我就跟qq客服申请了开通了授权登录(qq这么大平台为什么鸟我呢?因为授权登录对他来说没有损失什么,而且增加了qq对用户的粘黏性),小明点击登录的时候,我给他一个选项,使用qq账号登录,小明点击之后,我就把页面跳转到qq登录页面,要带着我跟qq申请的授权的商户id,小明登录他的qq号之后,qq再把页面跳转到我的网站,带着用户登录授权的凭证,我获取到凭证,去qq的服务器获取小明的信息,记录到我的服务器上,作为小明的登录凭证并且显示在小明的界面上。小明省了注册的麻烦,我获取了小明的信息,大家都很happy。
二、OAth2.0授权的四种方式
- 授权码(authorization-code)
- 隐藏式(implicit)
- 密码式(password):
- 客户端凭证(client credentials)
1 咱们继续小明授权的这个事,继续说。我是一个前端显示,后端服务器显示的网站,并且对于qq是最低级的商户,不是很信任我。所以我们之间的方式是授权码方式,授权方式基本分为三步
这里贴个图,大概了解下,后面配详细说明

a 获取授权码(这里注意的是这里是需要提前到qq的开发者平台申请商户id,并且用户需要在qq登录)
这里的请求是一个get请求,需要添加
response_type 请求目的
client_id 申请的商户id
state 自定义的csrf_token 用于回调验证(就是保证回调函数是我访问触发的,避免黑客模拟回调攻击接口)
http://qq.xxx.com/oauth/get-code?
response_type=code
&client_id=1
&state=xyz
b 请求令牌(之后就不需要小明操作了,我会直接跟qq交流获取令牌)
这里服务器之间的交互了,一般使用post请求
http://qq.xxx.com/api/oauth/get-token
参数
grant_type 必填 请求类型 authorization_code
client_id 必填 三方授权id testid
client_secret 必填 三方授权秘钥 XXXXXXXXXX
code 必填 上一步获取的code
c 获取用户信息(获取令牌后我就会用令牌获取小明的qq部分授权信息,2、3步骤对用户无感,因为很快很快)
使用token获取用户信息
http://qq.xxx.com/api/oauth/get-user-info?access_token=b2d91c2764bdde79e4f1e92349b969e8ee031e8a
参数
access_token 上一步获取的token
2 如果我的网站是个大网站比如新浪微博,那么qq就不能这么对待我了,就不要什么code,而且大网站之间的交互量很大,要节约资源,所以就可以省下获取code这一步。这种方式叫做隐藏式(为什么这么叫呢,不知道也不敢问,反正翻译过来就这样)

a 请求令牌,使用get方式
https://api.mysite.com/authorize?
response_type=token
&client_id=TestClient
&redirect_uri=https://myredirecturi.com/cb 参数
response_type 必填 请求类型 token
client_id 必填 三方授权id
redirect_uri 必填 回调跳转的url(一般都是在申请的时候设置的,发送之后qq会跟申请时候填写的url核对)
b 获取用户信息
使用token获取用户信息
http://qq.xxx.com/api/oauth/get-user-info?access_token=b2d91c2764bdde79e4f1e92349b969e8ee031e8a
参数
access_token 上一步获取的token
3 我跟微博都是外部网站,要走授权这一步,如果是腾讯内部的网站呢,比如 lol,都是亲兄弟跳转qq登录界面,增加用户操作复杂度不是么?,直接用qq账号密码上了,这种方式叫做密码式
a 请求令牌
这里是服务器之间的交互了,一般使用post请求
http://qq.xxx.com/api/oauth/get-token
grant_type=password&username=bshaffer&password=brent123
参数
grant_type 必填 请求类型 password
client_id 必填 三方授权id lol
client_secret 必填 三方授权秘钥 XXXXXXXXXX
username 必填 用户明 bshaffer
password 必填 用户密码 brent123
b 获取用户信息
使用token获取用户信息
http://qq.xxx.com/api/oauth/get-user-info?access_token=b2d91c2764bdde79e4f1e92349b969e8ee031e8a
参数
access_token 上一步获取的token
4 某一天,网信办跟qq说,有人用qq贩卖违禁品,需要调取你的用户数据配合调查,qq吓的一机灵,赶紧提供了一个最大权限的特殊账户,网信办可以直接调取用户数据,不需要用户授权。
POST方式
http://qq.xxx.com/api/oauth/get-user-info
grant_type 必填 获取方式 client_credentials
client_id 必填 商户id TestClient
client_secret 必填 商户秘钥 TestSecret
到这里,四种授权方式基本就将的差不多了。各位可以根据甲方爸爸的需求选择自己需要的方式。我这里是使用OAuth 2.0 Server PHP 实现的的授权码方式授权,点击这里查看实现的代码。
参考文献
OAuth2.0 官方文档 https://oauth.net/2/
OAuth 2.0 Server PHP 官方文档 https://bshaffer.github.io/oauth2-server-php-docs/
OAuth2.0的一个简单解释 阮一峰 http://www.ruanyifeng.com/blog/2019/04/oauth_design.html
OAuth2.0的四种方式 阮一峰 http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html
OAth 2.0 的白话讲解的更多相关文章
- 简单CSS实现闪烁动画(+1白话讲解)
原文:简单CSS实现闪烁动画(+1白话讲解) 本文转载于:猿2048网站⇒https://www.mk2048.com/blog/blog.php?id=icj2chj2ab 背景 本文承接自上文&l ...
- AFNetworking 2.0 新特性讲解之AFHTTPSessionManager
AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼ AFNetworking 2.0 相比1.0 API ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-3.微信Oauth2.0交互流程讲解
笔记 3.微信Oauth2.0交互流程讲解 简介:讲解微信Oauth2.0交互流程 参考:https://open.weixin.qq.com/cgi-bin/sho ...
- [置顶] AFNetworking 2.0 新特性讲解之AFHTTPSessionManager
AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRe ...
- dingo/API 最新版 V2.0 之安装讲解
我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...
- Android事件总线分发库EventBus3.0的简单讲解与实践
Android事件总线分发库EventBus的简单讲解与实践 导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Han ...
- 第一节: dingo/API 最新版 V2.0 之安装讲解(连载)
我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...
- smartJS 0.1 API 讲解 - FlowController
本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自 ...
- OAuth 2.0 授权方式讲解,规范实践和应用
基于实践说规范 网上看了一些OAuth 2.0的授权方法,尽管讲解的没有什么逻辑性错误,但是存在一个问题,那就是单纯的讲解协议规范却脱离了实际的应用,缺少干货,所以才有了这篇文章,内容基于实际业务进行 ...
随机推荐
- 深入了解Kafka【二】工作流程及文件存储机制
1.Kafka工作流程 Kafka中的消息以Topic进行分类,生产者与消费者都是面向Topic处理数据. Topic是逻辑上的概念,而Partition是物理上的概念,每个Partition分为多个 ...
- apply用法
result.push.apply(result, document.getElementsByTagName(tag)); 但是,这里为什么要用apply呢? 因为document.getEleme ...
- Linux搭建SonarQube
环境:linux+jdk8+mysql5.7.31+sonarqube7.5+sonar-scanner-4.4+jenkins2.249+sonar-l10n-zh-plugin-1.25.jar ...
- Appium自动化Android环境搭建
前言: 本系列教程用于个人经验记录,用于他人借鉴,提供一定参考价值.经常会有一种感觉,工具或技术在某一阶段使用比较熟练,过一段时间就可能会遗忘,俗话说好记性不如烂笔头,以此记录. appium简介 ...
- 【原创】解BUG-xenomai内核与linux内核时间子系统之间存在漂移
版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 一.问题起源 何为漂移?举个例子两颗32.768kH ...
- PHP面试总结(转)
PHP面试总结 从8月15号来到北京一直到今天,一月有余.来的这段时间一直准备笔试面试,大大小小的公司,乱七八糟面了10多家,近期才安顿下来.面试的这段时间感觉自己成长了不少.初来到这个陌生的城市 ...
- [补题]求a[i]+a[j]+i-j的最大值,要求i<j
题目 如题. 例: 输入: 5 11 6 5 18 12 输出: 29 题解 思路: 一直是按着(a[i]+a[j])+(i-j)想后序的思路,不应该限制住自己,应该多考虑拆的方法.正确思路是把a[i ...
- Python实现GUI开发 PySide2&PyQt环境配置
更新于2020-09-15 - 18:50:37 [前言] 关于Python开发GUI图形界面程序的问题,大概是19年十分困扰我,主要是没有经验以及缺乏高效简洁的视频或教学文档,导致在19年中秋前后花 ...
- 深入了解几种IO模型(阻塞非阻塞,同步异步)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zk3326312/article/details/79400805一般来说,Linux下系统IO主要 ...
- python实现多分类评价指标
1.什么是多分类? 参考:https://www.jianshu.com/p/9332fcfbd197 针对多类问题的分类中,具体讲有两种,即multiclass classification和mul ...