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 四种授权使用场景,图文结合不能再清晰了 -> 正文阅读

[网络协议]OAuth2 四种授权使用场景,图文结合不能再清晰了

1 OAuth 2.0 定义了四种授权方式

  • 密码模式(resource owner password credentials)
  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 客户端模式(client credentials)

1.1 密码模式

  • 这种模式是最不推荐的,因为 client 可能存了用户密码
  • 这种模式主要用来做遗留项目升级为 oauth2 的适配方案
  • 当然如果 client 是自家的应用,也是可以
  • 支持 refresh token
  • 一般在内部系统中使用,调用者是以用户为单位

用户向客户端提供自己的用户名和密码,向 "服务商提供商" 换取?access_token?。

1.2 授权码模式

  • 这种模式算是正宗的 oauth2 的授权模式
  • 设计了 auth code,通过这个 code 再获取 token
  • 支持 refresh token
  • 功能最完整、流程最严密的授权模式,通常使用在公网的开放平台中

适用于有自己的服务器的应用,它是一个一次性的临时凭证,用来换取?access_token?和?refresh_token。

一旦换取成功,code?立即作废,不能再使用第二次。

  1. 用户请求网站,如:www.baidu.com
  2. 重定向到一个授权页面
  3. 用户同意授权
  4. 重定向到应用的一个回调地址,如:www.baidu.com/recieve_token?code=123
  5. 用code换取access_token和refresh_token

授权码模式是最复杂的,也是最安全的

  1. 客户端请求验证,由用户获取 code
  2. 客户端拿到 code,请求 token
  3. 销毁 code,下发 token,而用户拿不到 token,客户端保存
  4. 客户端使用 token 访问资源
  5. 过期后使用 refresh_token 刷新 token 再次使用

授权码模式-token 过期

1.3 简化模式

  • 这种模式比授权码模式少了 code 环节,回调 url 直接携带 token
  • 这种模式的使用场景是基于浏览器的应用
  • 这种模式基于安全性考虑,建议把 token 时效设置短一些
  • 不支持 refresh token
  • 不安全,适用于纯静态页面应用

简化模式适用于纯静态页面应用。该模式下,access_token?容易泄露且不可刷新

  1. 用户请求网站,如:www.baidu.com
  2. 重定向到一个授权页面
  3. 用户同意授权
  4. 重定向到网站,并带上access_token如:www.baidu.com?access_token=123
  5. 获取到资源服务器的资源

  1. 不支持 refresh_token
  2. 浏览器即客户端
  3. 用户拿到 token,可能安全性有问题

1.4 客户端模式

  • 这种模式直接根据 client 的 id 和密钥即可获取 token,无需用户参与
  • 这种模式比较适合消费 api 的后端服务,比如拉取一组用户信息等
  • 不支持 refresh token
  • 一般在内部系统之间的 API 调用;两个平台之间调用;调用者是以平台为单位

如第三方,或者调用者是一个后端的模块,没有用户界面的时候,可以使用客户端模式。

鉴权服务器直接对客户端进行身份验证,验证通过后,返回 token。

公开服务调用的一种类型

  1. 与用户无关的应用
  2. 服务器之间通信
  3. 对用户透明,增强站点功能的一类

2 小结

密码模式

  • 为遗留系统设计,支持 refresh token

授权码模式

  • 正宗方式,支持 refresh token

简化模式

  • 为 web 浏览器应用设计,不支持 refresh token

客户端模式

  • 为后台 api 服务消费者设计,不支持 refresh token

以下场景可以考虑引入 Oauth 2.0 认证:

  • 系统敏感资源服务进行安全认证及资源保护工作
  • 多个服务的统一登录认证中心、内部系统之间受保护资源请求
  • 将受保护的用户资源授权给第三方信任用户
  • 以后要做开发平台,类似百度开放平台,腾讯开放平台

3 应用场景

3.1 案例:停车事件

OAuth2 解决:资源授权问题

酒店停车事件

  1. 开豪车到酒店
  2. 酒店服务生代泊车
  3. 泊车钥匙(只能开两公里,不能打开车内酒柜)
  4. 泊车
  5. 取车(自己的钥匙,全功能)

3.2 定义

OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的。

专用名词:

  1. Third-party application:第三方应用程序,又称"客户端"(client)。
  2. Resource Owner:资源所有者,又称"用户"(user)。
  3. User Agent:用户代理,指浏览器。
  4. Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
  5. Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

3.3 场景

场景一、微信登录

场景二、移动端登录

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:56:42  更:2022-01-25 10:58:07 
 
开发: 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 10:43:15-

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