OAuth2.0的四种授权方式

微服务应用之OAuth2.0的四种授权方式 看完你就会懂oauth2.0的四种授权方式是如何工作的了 阅读详情

在OAuth2.0中,OAuth2.0 provider负责保护暴露在外的资源,第三方应用客户端Client可以独立的或代表用户Owner来访问这些受保护的资源,provider提供token令牌的管理和验证来实现此功能,还必须提供一个授权确认页面,让用户Owner确认第三方Client是否可以访问这些受保护的资源 。

令牌相较与密码,有这些优势:1.令牌是短期的,到期会自动失效 2.令牌可以被数据所有者撤销,会立即失效 3.令牌有权限范围(scope)。

关于OAuth可以关注 阮一峰讲OAuth和江南一点雨讲解OAuth

OAuth非常好的一点就是考虑了实际应用中的复杂场景,总结了四种授权方式(authorization grant ):

  • 授权码(authorization-code)
  • 隐藏式(implicit)
  • 密码式(password)
  • 客户端凭证(client credentials)

注意,不管哪一种授权方式,第三方应用都必须先到系统申请客户端 ID(client ID)和客户端密钥(client secret),还要填写redirect_url。这是为了防止令牌被滥用,没有备案过的第三方应用,是不会拿到令牌的。

授权码模式

授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。

这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。

第一步:A 网站提供一个链接,用户点击后就会跳转到 B 网站,授权用户数据给 A 网站使用。下面就是 A 网站跳转 B 网站的一个示意链接

Get http://localhost:8080/oauth/authorize?
	response_type=code
	&client_id=client_2
	&redirect_uri=http://www.baidu.com
	&scope=select

第二步:跳转后,B 网站会要求用户登录,然后询问是否同意给予 A 网站授权。用户表示同意,这时 B 网站就会跳回redirect_uri参数指定的网址。跳转时,会传回一个授权码。`

https://www.baidu.com/?code=cDG0IN

第三步:A 网站拿到授权码以后,就可以在后端,向 B 网站请求令牌

	POST http://localhost:8080/oauth/token?
	client_id=client_2&
	client_secret=123456&
	grant_type=authorization_code&
	code=cDG0IN&
	redirect_uri=http://www.baidu.com

第四步:B 网站收到请求以后,就会颁发令牌

{    
  "access_token":"ACCESS_TOKEN",
  "token_type":"bearer",
  "expires_in":2592000,
  "refresh_token":"REFRESH_TOKEN",
  "scope":"read",
  "uid":100101,
  "info":{...}
}

根据access_token即可访问资源服务器里的内容

GET http://localhost:8081/openApi/order/1
Accept: application/json
Authorization: bearer access_token

隐藏式

有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。RFC 6749 就规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)“隐藏式”(implicit)。

第一步,A 网站提供一个链接,要求用户跳转到 B 网站,授权用户数据给 A 网站使用。

https://b.com/oauth/authorize?
  response_type=token&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read

第二步,用户跳转到 B 网站,登录后同意给予 A 网站授权。这时,B 网站就会跳回redirect_uri参数指定的跳转网址,并且把令牌作为 URL 参数,传给 A 网站

https://a.com/callback#token=ACCESS_TOKEN

注意,令牌的位置是 URL 锚点(fragment),而不是查询字符串(querystring),这是因为 OAuth 2.0 允许跳转网址是 HTTP 协议,因此存在"中间人攻击"的风险,而浏览器跳转时,锚点不会发到服务器,就减少了泄漏令牌的风险。

这种方式把令牌直接传给前端,是很不安全的。因此,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通常就是会话期间(session)有效,浏览器关掉,令牌就失效了

密码式

用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)。这种方式需要用户给出自己的用户名/密码,显然风险很大,因此只适用于其他授权方式都无法采用的情况,而且必须是用户高度信任的应用。
第一步,A 网站要求用户提供 B 网站的用户名和密码。拿到以后,A 就直接向 B 请求令牌

https://oauth.b.com/token?
  grant_type=password&
  username=USERNAME&
  password=PASSWORD&
  client_id=CLIENT_ID

第二步,B 网站验证身份通过后,直接给出令牌。注意,这时不需要跳转,而是把令牌放在 JSON 数据里面,作为 HTTP 回应,A 因此拿到令牌。

凭证式

凭证式(client credentials),适用于没有前端的命令行应用,即在命令行下请求令牌。这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌

第一步,A 应用在命令行向 B 发出请求

https://oauth.b.com/token?
  grant_type=client_credentials&
  client_id=CLIENT_ID&
  client_secret=CLIENT_SECRET

上面 URL 中,grant_type参数等于client_credentials表示采用凭证式,client_id和client_secret用来让 B 确认 A 的身份。

第二步,B 网站验证通过以后,直接返回令牌。

令牌的使用

A 网站拿到令牌以后,就可以向 B 网站的 API 请求数据了。

此时,每个发到 API 的请求,都必须带有令牌。具体做法是在请求的头信息,加上一个Authorization字段,令牌就放在这个字段里面。

curl -H "Authorization: Bearer ACCESS_TOKEN" \
"https://api.b.com"

上面命令中,ACCESS_TOKEN就是拿到的令牌。

令牌的有效期到了,如果让用户重新走一遍上面的流程,再申请一个新的令牌,很可能体验不好,而且也没有必要。OAuth 2.0 允许用户自动更新令牌。

具体方法是,B 网站颁发令牌的时候,一次性颁发两个令牌,一个用于获取数据,另一个用于获取新的令牌(refresh token 字段)。令牌到期前,用户使用 refresh token 发一个请求,去更新令牌。

https://b.com/oauth/token?
  grant_type=refresh_token&
  client_id=CLIENT_ID&
  client_secret=CLIENT_SECRET&
  refresh_token=REFRESH_TOKEN

上面 URL 中,grant_type参数为refresh_token表示要求更新令牌,client_id参数和client_secret参数用于确认身份,refresh_token参数就是用于更新令牌的令牌。

B 网站验证通过以后,就会颁发新的令牌。

oauth2-provider:oauth2 提供程序的实现 使用 spring 安全性的示例 OAuth 提供程序请参见 构建和运行测试:gradle clean build integrationTest 运行: gradle tomcatRun 注册新用户: curl -X POST -H "内容类型:应用程序/json" -H "授权:基本 MzUzYjMwMmM0NDU3NGY1NjUwNDU2ODdlNTM0ZTdkNmE6Mjg2OTI0Njk3ZTYxNWE2NzJhNjQ2YTQ5MzU0NTY0NmM=" -d '{"user":{"emailAddress":" "}, "password":"password"}' ' ' 登录: curl -v -X POST -H "内容类型:应用程序/json" -H "授权:基本 MzUzYjMwMmM0NDU3NGY1NjUwNDU2ODdlNTM0ZTdkNmE6 立即下载

相关推荐

OrangePi Kunpeng Pro 安装 ROS2 + Gazebo

OrangePi Kunpeng Pro 的优点很明显,内置openEuler,配备PD电源,做到开箱即用;板子设计也不错,风扇噪音不大,散热良好,昇腾芯片又确保小板子的性能,接口丰富是这类板子共同的优点,也很好的继承了下来,甚至还可以外接固态,可靠性大大提升。使用起来,哪怕不用openEuler的话,也可以很方便的刷Ubuntu来实现一些需要依赖的开发工作,这次没有跑AI模型,所以对算力的优势还没有很明显的感受,下次可以试一下yolo跑跑看。

Arcan 1820

oauth2自定义granter与provider实现自定义身份认证

自定义granter和provider,来实现特殊需求下的oauth认证和颁发令牌

slxz001的博客 3569

基于 ESP32 的智能药盒提醒装置设计与实现

本装置基于 ESP32 实现了智能药盒的核心功能,硬件选型兼顾成本与实用性,软件设计模块化、易拓展。后续可通过 ESP32 的 WiFi 模块接入物联网平台(如阿里云、OneNet),实现远程设置提醒、服药状态反馈等功能,进一步提升智能化水平。该装置能有效解决老人忘服药问题,具有较高的实用价值与推广潜力。

weixin_42300449的博客 1043

Spring Boot+OAuth2,一个注解搞定单点登录!

需要先说一下,松哥最近写的教程,都是成系列的,有一些重复的东西写来写去就没意思了,所以每一篇文章都默认大家已经懂了前面的内容了,因此下文有任何看不懂的地方,建议一定先看下相关系列: Spring Security 系列: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密码怎么解密了 手把手教你定制 Spring Security 中...

江南一点雨的专栏 3万+

Arduino 系列:Arduino Due 系列 (基于 ATSAM3X8E)_(5).电源管理与电压调节

电源管理与电压调节是确保嵌入式系统稳定性和可靠性的关键环节。通过合理选择电源输入方式、使用高效的电压调节器、设计适当的滤波电路和实施动态电源管理,可以有效提高系统的性能和寿命。同时,使用电源调试工具和编写调试代码,可以帮助开发者及时发现和解决问题。希望本文档能为使用 Arduino Due 的开发者提供有用的信息和指导。

2401_87715305的博客 1308

结构优化软件:OptiStruct_(11).拓扑优化

在OptiStruct中,设计空间可以通过定义设计区域来实现。设计区域是结构中可以进行材料变化的部分。几何区域:通过几何选择工具选择特定的区域。网格区域:通过网格选择工具选择特定的单元。假设我们有一个简单的梁结构模型,网格文件为beam.fem。我们希望在梁的中部进行拓扑优化,以减轻重量并保持刚度。

kkchenjj的博客 1366

OAuth2 Provider 项目常见问题解决方案

OAuth2 Provider 项目常见问题解决方案 项目基础介绍和主要编程语言 OAuth2 Provider 是一个用于在 Rails 应用程序中实现 OAuth 2.0 协议的插件。该项目的主要编程语言是 Ruby,并且它是基于 Ruby on Rails 框架开发的。OAuth 2.0 是一种授权框架,允许第三方应用程序通过用户的授权访问受保护的资源,而无需用户直接向第三方应用程序提供其凭...

gitblog_00497的博客 939

【单片机】STM32F103C8T6 最小系统板原理图

STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,由STMicroelectronics(ST)公司生产。它是STMicroelectronics的STM32系列微控制器中的一员,被广泛应用于嵌入式系统和电子设备中。LQFP48封装(Low-profile Quad Flat Package,48引脚)SRAM(静态随机访问存储器):20 KB。支持JTAG调试和编程接口(可选)多个通用输入/输出口(GPIO)USB接口(用于USB设备模式)内置调试和编程接口(SWD)

q742971636的博客 6万+

OAuth2.0 四种授权方式讲解

OAuth2通过将用户密码信息与第三方应用程序隔离,提高了应用程序的安全性。同时,OAuth2是一个开放的标准,可以与不同的应用程序、平台和设备兼容,易于理解和使用,可以快速集成到应用程序中。

让优秀成为一种习惯! 5982

部署OpenClaw时设置环境变量提示export: not valid in this context的完整解决方案

OpenClaw环境变量设置错误解决方案 问题概述 在部署OpenClaw时设置环境变量出现"export: not valid in this context"错误,通常由以下原因导致: 在非交互式shell中使用export命令 在命令替换或管道中使用export 脚本文件包含Windows换行符(CRLF) 解决方案 修正脚本执行方式:确保export命令在正确的shell上下文中使用 使用source命令:通过. setup_openclaw.sh或source setup_op

博客 457

基于LED可见光通信的物联网系统设计_344

随着物联网技术的不断发展,传统无线通信在工业环境中面临电磁干扰强、通信质量不稳定等问题。为此,本文设计了一种基于LED可见光通信的物联网系统,实现工厂车间内设备状态的稳定、高效、低干扰数据传输。系统主要由设备节点、设备主机、华为云物联网服务器以及可视化上位机构成。 设备节点采集机器的出货量、运行状态、机身温度等关键信息,通过调制后的LED可见光信号发送至设备主机。主机利用红外接收器接收光信号后进行解调处理,并通过WIFI模块将数据上传至华为云IOT服务器。

343

OAuth2.0 的四种授权方式

OAuth2.0是一种用于授权的开放标准,它提供了一种安全的方式,允许用户授权第三方应用程序访问其受保护的资源,而无需共享其凭据。OAuth2.0定义了四种主要的授权方式,本文将介绍这些授权方式及其用途。

weixin_74268571的博客 1792

ROS机器人里程计模型

3.5 移动机器人系统模型 相信大家的机器人平台STM32端底层控制和机器人urdf建模都已经顺利完成了,在正式开始ros端编写机器人启动功能包之前,我们还不得不学习一些必要的理论知识。别担心数学不好,这里基本都是高中数学。下面我们开始,Are you ready? 没准备好也开始了。 3.5.1 常用坐标系系统模型 在移动机器人技术研究中,最为常用的坐标系统是笛卡尔坐标系统。而在SLAM算法研究中,有如下几个比较常见的笛卡尔坐标系统,它们分别为机器人坐标系XR YR OR 、传感器坐标系XS YS OS

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

【OAuth2系列】如何使用OAuth 2.0实现安全授权?详解四种授权方式

在本文中,我们将全面解析 OAuth 2.0 的授权机制和应用场景,包括常用的四种授权方式以及相关的数据库表结构设计。通过实际的例子和详细的流程分析,希望能够帮助开发者快速掌握 OAuth 2.0 的核心概念和实现方法。

c18213590220的博客 9217

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OAuth 2.0的四种授权方式

转载自阮一峰老师的博客(为了印象深刻,自己又手动码了一遍) OAuth 2.0 的四种方式 OAuth 2.0 简单解释: OAuth 2.0 是目前最流行的授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。 OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。资源所有者同...

weixin_40747545的博客 1907

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

一口气说出 OAuth2.0 的四种授权方式

一、OAuth2.0 为何物 OAuth简单理解就是一种授权机制,它是在客户端和资源所有者之间的授权层,用来分离两种不同的角色。在资源所有者同意并向客户端颁发令牌后,客户端携带令牌可以访问资源所有者的资源。 OAuth2.0是OAuth协议的一个版本,有2.0版本那就有1.0版本,有意思的是OAuth2.0却不向下兼容OAuth1.0,相当于废弃了1.0版本。 举个小栗子解释一下什么是 OAuth 授权? 在家肝文章饿了定了一个外卖,外卖小哥30秒火速到达了我家楼下,奈何有门禁进不来,可以...

qwer123451234123的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SpringBoot集成OAuth2.0的四种授权方式

背景 OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。 OAuth2.0 是OAuth协议的延续版本,但不向后兼容 OAuth 1.0 ,即完全废止了 OAuth1.0 。很多大公司,国外的如Google,Netflix,Microsoft等,国内的像ByteDance,Alibaba,Tencent等都提供了OAuth认证服务(开放平台),这些都足以说明OAuth标准逐渐成为开放资源授权的标

Heartsuit的博客 4890

oauth2 clientid作用_一口气说出 OAuth2.0 的四种授权方式

上周我的自研开源项目开始破土动工了,《开源项目迈出第一步,10 选 1?页面模板成了第一个绊脚石 》 ,密谋很久才付诸行动,做这个的初衷就是不想让自己太安稳,技术这条路不进步就等于后退,必须要逼着自己学习。项目偏向于技术实践,因此不会做太多的业务堆砌,业务代码还是在公司学习比较好。现在正在做技术的选型与储备,像比较主流的,项目前后端分离、微服务、Springboot、Springclou...

weixin_39556811的博客 3250

OAuth2.0四种授权方式详解

OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。 OAuth1.0https://www.ietf.org/rfc/rfc5849.txt OAuth2.0https://tools.ietf.org/html/rfc6749 OAuth2.0定义了四种获取令牌的方式 授权码(authorization-code) 隐藏式(implicit) 密码式(password): 客户端凭..

卡了个卡 7445

OAuth 2.0 的四种授权方式

RFC 6749 OAuth 2.0 的标准是 RFC 6749 文件。该文件先解释了 OAuth 是什么。 OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。......资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。 这段话的意思就是,OAuth 的核心就是向第三方应用颁发令牌。然后,RFC 6749 接着写道: (由于互联...

GY的的专栏 366
上一篇: 主要垃圾回收器和垃圾回收算法
下一篇: 自动化测试注册接口,如何生成大量临时邮箱和获取邮箱验证码
余生之君
博客等级 码龄10年 246粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值