OAuth基础介绍

2023-10-28

什么是OAuth

OAuth是为解决应用之间、网站之间互相访问的一种简单、标准、安全的API授权协议。
官网对其的定义:

An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.

一个典型的OAuth应用通常包括三种角色,分别是:

  • Consumer:消费方
  • Service Provider:服务提供者
  • User:用户

举例来说:假设我们要做一个APP,它有一个功能,需要使用Twitter做第三方登录,那么就需要使用到Twitter提供的认证以及查询用户相关信息的API,那么此时的消费方就是我们的APP,而服务提供者则是Twitter。

消费方如果想使用服务提供者的OAuth功能,通常需要先申请两样东西:

  • Consumer Key
  • Consumer Secret

当消费方生成签名的时候,会用到它们。

一个典型的OAuth流程通常如下图所示:
在这里插入图片描述

OAuth流程图

  • A:消费方请求Request Token
  • B:服务提供者授权Request Token
  • C:消费方定向用户到服务提供者
  • D:获得用户授权后,服务提供者定向用户到消费方
  • E:消费方请求Access Token
  • F:服务提供者授权Access Token
  • G:消费方访问受保护的资源

基本就是用Request Token换取Access Token的过程。这里需要注意的是,对服务提供者而言,Request Token和Access Token的生命周期不一样,通常,Request Token的生命周期很短,一般在一个小时以内,这样相对安全一些;而Access Token的生命周期很长,往往是无限,如此一来,消费方就可以把它保存起来,以后的操作就无需用户再授权了,即便用户修改账号密码,也不会受影响,当然,用户可以废除消费方的授权。

Legged OAuth

前面描述的OAuth,被称为3-Legged OAuth,这也是OAuth的标准版本。这里所谓的“三条腿”,指的是授权过程中涉及三步流程。不过有些情况下,不需要用户的参与,此时就产生了一个变体,被称作两条腿的OAuth(2-Legged OAuth),两条腿的OAuth和三条腿的OAuth相比,因为没有用户的参与,所以在流程中就不会涉及用户授权的环节,而主要是通过Consumer Key和Consumer Secret来完成签名的,此时的Consumer Key和Consumer Secret基本等价于账号和密码的作用。

OAuth和OpenID的区别

OAuth关注的是authorization;而OpenID侧重的是authentication。从表面上看,这两个英文单词很容易混淆,但实际上,它们的含义有本质的区别:

  • authorization: n. 授权,认可;批准,委任
  • authentication: n. 证明;鉴定;证实

OAuth关注的是授权,即:“用户能做什么”;而OpenID关注的是证明,即:“用户是谁”。

客户端的授权模式

客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。

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

说明:

签名的意义在于防止请求被篡改。如果没有签名,只是简单的使用Consumer Key和Consumer Secret,那和HTTP Basic还有什么区别?实际使用OAuth的时候,请求中是不包含Consumer Secret的,它只是参与签名的计算,所以,就算请求被别有用心的人截获也是没用的,因为他不知道Consumer Secret,所以算不出正确的签名,也就无法构造出合法的请求。

3-Legged OAuth就是通过User的授权,Consumer可以访问User在Service
Provider的数据;至于2-Legged OAuth,没有User的参与,只是Consumer和Service Provider的交互

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OAuth基础介绍 的相关文章

随机推荐

  • 大数据从入门到精通(超详细版)之HDFS安装部署 , 跟着部署 , 真的有手就行 !

    前言 嗨 各位小伙伴 恭喜大家学习到这里 不知道关于大数据前面的知识遗忘程度怎么样了 又或者是对大数据后面的知识是否感兴趣 本文是 大数据从入门到精通 超详细版 的一部分 小伙伴们如果对此感谢兴趣的话 推荐大家按照大数据学习路径开始学习哦
  • 什么是link标签?

    什么是link标签 link标签通常放置在一个网页的头部标签head标签内的用于链接外部css文件 链接收藏夹图标 favicon ico 标签最常见的用途是链接外部样式表 外部资源 link实例 链接外部css样式时候link标签的内容结
  • Android性能优化之内存优化

    前言 成为一名优秀的Android开发 需要一份完备的知识体系 在这里 让我们一起成长为自己所想的那样 内存优化可以说是性能优化中最重要的优化点之一 可以说 如果你没有掌握系统的内存优化方案 就不能说你对Android的性能优化有过多的研究
  • OpenHarmony鸿蒙 润和Pegasus套件样例--智能安防

    润和Pegasus套件样例 智能安防 该样例展示OpenHarmony智能安防项目 当温度传感器超过设定值后 或者烟雾传感器检测到烟雾时 会触发蜂鸣器工作 同时通知到HarmonyOS手机上的APP 下载源码 建议将本教程的设备源码下载后
  • 小白入门——“贪吃蛇”的C语言实现(详细)

    C语言实现 编译环境VS 附 easyx图形化 文章末尾 效果图如下 有一些函数kbhit getch 在这表示为 kbhit与 getch 不同编译器原因 注意在Dev等集成开发软件下可能会CE o o 一 引言 作为一个小白 相信大家的
  • 个人工作失误复盘

    今天 同门突然指出了我在去年10月做一项代码测试工作时犯的错误 当时 我的任务是测试某论文中新发布的图像配准算法在我们的航拍图像配准任务上的效果 以便决定是否在其上进行改进 我按照readme文件中的指引下载了预训练权重 并按照项目代码中给
  • 接口自动化测试环境搭建(unittest+requests+HTMLTestRunner)

    该自动化测试框架基于python单元测试框架unittest 使用HTMLTestRunner来生成测试报告 使用Requests xlrd 和 xlwt等库 一 安装python运行环境 安装包官方下载地址 https www pytho
  • GAN+pytorch实现MNIST生成

    背景知识 GAN 原理可以在这里查看 GAN入门简介 pytorch 一个深度学习的框架 关于环境配置有问题 可以在这里查看 从零开始机器学习 代码实现 本文实现最简单的例子 利用GAN生成MNIST的数字 代码如下 导入包 matplot
  • 麦昆PLUS V2-适合中小学STEAM教学的机器人套件

    著名开源硬件商DFRobot推出的最新版本机器人套件麦昆Plus V2来了 它非常适用于中小学STEAM机器人教学 和麦昆LITE相比 麦昆plus V2的优势有哪些 和麦昆LITE相比 具有丰富的扩展接口 充足的电力供应 宽大的机身 麦昆
  • 基于U-Net的递归残差卷积神经网络在医学图像分割中的应用

    转载 版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net weixin 45723705 article details 10709748
  • Ubuntu18.04~Ubuntu22.04安装并配置VNC

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 VNC是什么 二 系统环境 1 前提 2 打开Share开关 3 安装x11vnc 4 测试 1 使用方法 2 重要补充 总结 前言 有些操作需要Desk
  • OpenCV_车辆检测实战

    前言 总纲请看 计算机视觉学习路 1 去除背景 createBackgroundSubtractorMOG2 history 200 代表预存多少视频帧 根据这些帧里面静止的东西判断背景 可以看到树叶形成了很多噪点 所以需要在去除背景前先去
  • 使用create-react-app创建React项目

    目录 环境 开发工具 创建 简单的配置 1 安装craco插件 2 修改package json配置文件 3 重写webpack配置文件 参考 简单记录一下使用create react app创建React项目 使用craco进行了简单的配
  • 如何在 magento 2 中以编程方式清理或刷新缓存?

    如何在 magento 2 中以编程方式清理或刷新缓存 在开发的情况下 开发人员或商家的请求 需要以编程方式清除 刷新缓存 如果您在 Magento2 中以编程方式清除缓存时遇到问题 本文适合您 今天 我们将向您展示如何以编程方式清除缓存
  • uboot 移植计划

    将uboot nandflash 包括ecc 驱动起来 把ethernet驱动起来 然后用mmc boot gt tftp nandflash uboot 到nandflash中去 然后uboot就移植ok了 以后就使用nandflash中
  • get 和 post的区别

    get和post的区别 第一 get和post都是http请求 第二 get请求指定页面的信息 并返回实体主体 get是从服务器获取数据资源 post一般用于修改 更新 服务器上的的资源 是从服务器传送数据 get通过地址栏来传值 post
  • Mysql复制表中数据给另一张表

    个人简介 个人主页 摸鱼 文酱博客主页 博客领域 java编程基础 mysql 写作风格 干货 干货 还是tmd的干货 精选专栏 Java mysql 算法刷题笔记 博主的码云gitee 平常博主写的程序代码都在里面 支持博主 点赞 收藏
  • anaconda创建、删除虚拟环境指令

    使用 c o n d a 创建 删除虚拟环境指令
  • 动态分区、虚拟内存、分页存储、分段存储 简介

    动态分区的特点 分区的个数和大小可变 存在内存碎片 动态分区 就是动态的判断某一块的内存空间能否存储 不会找到刚刚好的 一般都是能放进去就放了 其他剩下的区域 又交给其他程序进行存储 然后几轮下来 就会存在很小的空间 无法利用 这就是内存的
  • OAuth基础介绍

    什么是OAuth OAuth是为解决应用之间 网站之间互相访问的一种简单 标准 安全的API授权协议 官网对其的定义 An open protocol to allow secure API authorization in a simpl