一、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 用于回调验证(就是保证回调函数是我访问触发的,避免黑客模拟回调攻击接口)

  1. http://qq.xxx.com/oauth/get-code?
    response_type=code
    &client_id=1
    &state=xyz

b 请求令牌(之后就不需要小明操作了,我会直接跟qq交流获取令牌)

这里服务器之间的交互了,一般使用post请求

  1. http://qq.xxx.com/api/oauth/get-token
  2. 参数
  3. grant_type 必填 请求类型 authorization_code
  4. client_id 必填 三方授权id testid
  5. client_secret 必填 三方授权秘钥 XXXXXXXXXX
  6. code 必填 上一步获取的code

  

c 获取用户信息(获取令牌后我就会用令牌获取小明的qq部分授权信息,2、3步骤对用户无感,因为很快很快)

  1. 使用token获取用户信息
  2. http://qq.xxx.com/api/oauth/get-user-info?access_token=b2d91c2764bdde79e4f1e92349b969e8ee031e8a
    参数
  3. access_token 上一步获取的token

2 如果我的网站是个大网站比如新浪微博,那么qq就不能这么对待我了,就不要什么code,而且大网站之间的交互量很大,要节约资源,所以就可以省下获取code这一步。这种方式叫做隐藏式(为什么这么叫呢,不知道也不敢问,反正翻译过来就这样)

a 请求令牌,使用get方式

  1. https://api.mysite.com/authorize?
  2. response_type=token
  3. &client_id=TestClient
  4. &redirect_uri=https://myredirecturi.com/cb
  5.  
  6. 参数
  7. response_type 必填 请求类型 token
  8. client_id 必填 三方授权id
  9. redirect_uri 必填 回调跳转的url(一般都是在申请的时候设置的,发送之后qq会跟申请时候填写的url核对)

  

  

b 获取用户信息

  1. 使用token获取用户信息
  2. http://qq.xxx.com/api/oauth/get-user-info?access_token=b2d91c2764bdde79e4f1e92349b969e8ee031e8a
    参数
  3. access_token 上一步获取的token

3 我跟微博都是外部网站,要走授权这一步,如果是腾讯内部的网站呢,比如 lol,都是亲兄弟跳转qq登录界面,增加用户操作复杂度不是么?,直接用qq账号密码上了,这种方式叫做密码式

a 请求令牌

这里是服务器之间的交互了,一般使用post请求

  1. http://qq.xxx.com/api/oauth/get-token
  2. grant_type=password&username=bshaffer&password=brent123
  3. 参数
  4. grant_type 必填 请求类型 password
  5. client_id 必填 三方授权id lol
  6. client_secret 必填 三方授权秘钥 XXXXXXXXXX
  7. username 必填 用户明 bshaffer
  8. password 必填 用户密码 brent123

b 获取用户信息

  1. 使用token获取用户信息
  2. http://qq.xxx.com/api/oauth/get-user-info?access_token=b2d91c2764bdde79e4f1e92349b969e8ee031e8a
    参数
  3. access_token 上一步获取的token

4 某一天,网信办跟qq说,有人用qq贩卖违禁品,需要调取你的用户数据配合调查,qq吓的一机灵,赶紧提供了一个最大权限的特殊账户,网信办可以直接调取用户数据,不需要用户授权。

  1. POST方式
  1. http://qq.xxx.com/api/oauth/get-user-info
  1. grant_type 必填 获取方式 client_credentials
  2. client_id 必填 商户id TestClient
  3. 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 的白话讲解的更多相关文章

  1. 简单CSS实现闪烁动画(+1白话讲解)

    原文:简单CSS实现闪烁动画(+1白话讲解) 本文转载于:猿2048网站⇒https://www.mk2048.com/blog/blog.php?id=icj2chj2ab 背景 本文承接自上文&l ...

  2. AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

    AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API ...

  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-3.微信Oauth2.0交互流程讲解

    笔记 3.微信Oauth2.0交互流程讲解     简介:讲解微信Oauth2.0交互流程              参考:https://open.weixin.qq.com/cgi-bin/sho ...

  4. [置顶] AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

    AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRe ...

  5. dingo/API 最新版 V2.0 之安装讲解

    我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...

  6. Android事件总线分发库EventBus3.0的简单讲解与实践

    Android事件总线分发库EventBus的简单讲解与实践 导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Han ...

  7. 第一节: dingo/API 最新版 V2.0 之安装讲解(连载)

    我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...

  8. smartJS 0.1 API 讲解 - FlowController

    本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自 ...

  9. OAuth 2.0 授权方式讲解,规范实践和应用

    基于实践说规范 网上看了一些OAuth 2.0的授权方法,尽管讲解的没有什么逻辑性错误,但是存在一个问题,那就是单纯的讲解协议规范却脱离了实际的应用,缺少干货,所以才有了这篇文章,内容基于实际业务进行 ...

随机推荐

  1. SpringBoot系列之从入门到精通系列教程

    对应SpringBoot系列博客专栏,例子代码,本博客不定时更新 Spring框架:作为JavaEE框架领域的一款重要的开源框架,在企业应用开发中有着很重要的作用,同时Spring框架及其子框架很多, ...

  2. 09_Python语法示例(数据类型)

    1.买苹果,计算金额并保留两位小数 price = int(input("苹果的单价: ")) weight = float(input("苹果的重量: ")) ...

  3. nginx高可用

    15.1. 传统的高可用思路 tomcat的高可用的思路,是在tomcat集群前面加一层负载服务nginx.如下图 这种做法,解决了tomcat的高可用问题.但是引入了前面的负载机器的高可用问题(Ng ...

  4. iTextSharp生成PDF文件

    这是一篇简单的教程,所以只涉及一些iTextSharp生成pdf的简单应用,详细教程请搜索iTextSharp进入官网看官方文档(英文版). iTextSharp官方文档:https://itextp ...

  5. 如何把自己开发的项目上传到GitHub仓库或者码云仓库?

    首先你需要用你的邮箱去注册一个自己的GitHub仓库 or 码云仓库.然后确保你的电脑安装了git. 码云仓库:https://gitee.com/ GitHub:https://github.com ...

  6. Linux 获取屏幕分辨率与窗口行列数(c/c++)

    获取当前分辨率 #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<s ...

  7. [LeetCode] 46. 全排列(回溯)

    ###题目 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], ...

  8. MySQL<=>是什么鬼

    官网描述 NULL-safe equal. This operator performs an equality comparison like the = operator, but returns ...

  9. docker部署安装zabbix

    安装docker 安装docker需要配置网络yum源,centos7自带的版本太低了 第一步:下载阿里云的docker安装包 在yum仓库的目录之下 [root@localhost yum.repo ...

  10. 最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)

    1. 前言 上篇文章 聊到 Python 处理 Mysql 数据库最常见的两种方式,本篇文章继续说另外一种比较常用的数据库:Sqlite Sqlite 是一种 嵌入式数据库,数据库就是一个文件,体积很 ...