首页 > 其他分享 >OAuth 2.0以及它的工作过程工作过程

OAuth 2.0以及它的工作过程工作过程

时间:2024-10-21 08:58:51浏览次数:4  
标签:令牌 访问 OAuth 授权 2.0 过程 客户端

这里可以看阮一峰老师关于 OAuth 2.0 的介绍:
理解OAuth 2.0:https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
OAuth 2.0 的一个简单解释: https://www.ruanyifeng.com/blog/2019/04/oauth_design.html
OAuth 2.0 的四种方式:https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

OAuth 2.0 是一种用于访问授权的开放标准协议,它允许应用程序在无需暴露用户凭据(如用户名和密码)的情况下安全地访问其他应用程序的资源。OAuth 2.0 的设计目标是解决跨平台或跨应用之间的授权问题,它允许第三方应用程序代表用户访问资源,而无需直接向第三方暴露用户的密码。

一、OAuth 2.0 的背景与问题

在现代网络应用中,用户常常需要授权第三方应用程序访问自己在某些服务提供商(如Google、Facebook等)上的资源。例如,一个用户希望授权某个社交媒体应用程序访问他在Google Drive上的照片,而不希望将自己的Google账户密码交给这个社交媒体应用程序。在这种情况下,传统的凭据分享方式存在严重的安全风险:

  1. 凭据共享风险:用户需要将自己的用户名和密码提供给第三方,这增加了密码被滥用或泄露的风险。
  2. 权限过度:一旦用户共享了自己的凭据,第三方可以获得对用户所有资源的访问权限,超出用户的预期。
  3. 凭据无法撤销:如果用户想要撤销对某个应用的授权,他不得不更改自己的密码,从而影响其他已授权的服务。

为了解决这些问题,OAuth 2.0 引入了一种安全、可靠且灵活的方式来管理授权和访问。

二、OAuth 2.0 解决了什么问题?

  1. 分离身份验证与授权:OAuth 2.0 允许第三方应用程序(也称为客户端应用)在用户授权的情况下访问资源,而无需直接获取用户的凭据。

  2. 精细化权限控制:通过OAuth 2.0,用户可以授权应用程序访问特定的资源或执行特定的操作,而无需开放所有权限。

  3. 可撤销性:用户可以随时通过资源提供商(如Google)的设置界面撤销某个应用程序的授权,而无需更改密码。

  4. 减少用户密码暴露的风险:应用程序不再直接处理用户的密码,授权流程通过访问令牌控制,确保用户凭据的安全。

三、OAuth 2.0 的角色

在OAuth 2.0的架构中,主要涉及四个角色:

  1. 资源所有者(Resource Owner):通常是用户,拥有需要访问的资源。例如,用户的Google Drive上的文件。

  2. 客户端(Client):请求访问资源的应用程序。它可以是一个Web应用、移动应用或桌面应用。

  3. 授权服务器(Authorization Server):负责认证资源所有者的身份,并在获得授权后,颁发访问令牌(Access Token)。授权服务器通常由资源服务器同一实体管理(例如,Google 的授权服务器可以为Google Drive的资源提供授权)。

  4. 资源服务器(Resource Server):提供保护资源的服务器,例如Google Drive。资源服务器通过验证访问令牌来确定客户端是否有权限访问资源。

四、OAuth 2.0 的工作流程

OAuth 2.0 的授权流程分为几个步骤,涉及令牌(Token)交换等关键过程。它可以通过多种授权方式完成,其中最常用的是授权码授权(Authorization Code Grant)流程。下面是OAuth 2.0的完整工作过程:

1. 资源所有者向客户端发起操作

用户(资源所有者)在客户端应用中进行某项操作,该操作需要访问资源服务器上的资源。客户端会跳转至授权服务器的认证页面,让用户授权。

2. 客户端向授权服务器请求授权

客户端将用户重定向到授权服务器的授权页面,URL中通常包含以下信息:

  • client_id:客户端应用的唯一标识符。
  • redirect_uri:授权成功后重定向的地址(客户端提供)。
  • response_type:通常为 code,表示客户端期望获取授权码。
  • scope:请求访问的资源范围(如读取邮件、访问文件等)。
  • state:用于防止CSRF攻击的随机字符串。

示例授权请求:

GET /authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=code&scope=email&state=STATE

3. 用户认证与授权

资源所有者会被授权服务器(如Google的OAuth页面)要求进行身份验证(如果尚未登录)。登录后,授权服务器会向用户展示授权页面,用户可以选择是否授权客户端访问指定的资源范围(scope)。

4. 授权服务器返回授权码

如果用户同意授权,授权服务器会生成一个临时的授权码(Authorization Code),并将其通过redirect_uri重定向到客户端。返回的URL中包含以下信息:

  • code:授权码,客户端可以用它换取访问令牌。
  • state:与最初请求中的 state 值匹配,以防止CSRF攻击。

示例返回:

HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=AUTHORIZATION_CODE&state=STATE

5. 客户端使用授权码向授权服务器请求访问令牌

客户端收到授权码后,会向授权服务器的令牌端点(Token Endpoint)发出POST请求,换取访问令牌(Access Token)。该请求通常包含以下参数:

  • grant_type:授权类型,authorization_code 表示使用授权码模式。
  • code:步骤4中获得的授权码。
  • redirect_uri:与前面授权请求中使用的 redirect_uri 一致。
  • client_idclient_secret:客户端的标识符和密钥,用于证明客户端的身份。

示例POST请求:

POST /token
Host: https://authorization-server.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI&client_id=CLIENT_ID&client_secret=CLIENT_SECRET

6. 授权服务器返回访问令牌

授权服务器验证授权码和客户端身份后,会返回一个访问令牌(Access Token),有时还会返回一个刷新令牌(Refresh Token),用于获取新的访问令牌。

示例返回:

{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "REFRESH_TOKEN"
}
  • access_token:用于访问资源服务器的凭证。
  • expires_in:令牌有效期(秒)。
  • refresh_token:用于获取新的访问令牌,无需用户再次授权。

7. 客户端使用访问令牌访问资源

客户端持有访问令牌后,可以通过请求资源服务器的API来访问受保护的资源。客户端会将访问令牌放入HTTP请求的Authorization头中,作为Bearer令牌:

示例API请求:

GET /resource HTTP/1.1
Host: resource-server.com
Authorization: Bearer ACCESS_TOKEN

8. 资源服务器验证令牌并返回资源

资源服务器接收到访问令牌后,会向授权服务器验证令牌的有效性。如果令牌有效且权限足够,资源服务器会返回请求的资源。

五、OAuth 2.0 的授权模式

除了授权码模式(Authorization Code Grant),OAuth 2.0 还支持其他几种常见的授权模式,适用于不同场景:

  1. 隐式授权模式(Implicit Grant):主要用于单页应用(SPA)或移动应用,客户端直接在浏览器中接收访问令牌,无需通过服务器端换取授权码。这种模式不涉及刷新令牌,因为安全性较低,适用于短期使用场景。

  2. 密码授权模式(Resource Owner Password Credentials Grant):用户将其凭据(用户名和密码)直接提供给客户端应用,客户端再用这些凭据向授权服务器请求访问令牌。这种模式一般不建议使用,除非客户端是受信任的应用。

  3. 客户端凭据模式(Client Credentials Grant):客户端以自己的身份(而非用户的身份)请求访问受保护的资源。这通常用于应用程序间的服务(如微服务)之间的授权,而非用户授权。

  4. 刷新令牌(Refresh Token Grant):当访问令牌过期时,客户端可以使用刷新令牌获取新的访问令牌,而无需再次向用户请求授权。

六、OAuth 2.0 的优势

  1. 安全性增强:OAuth 2.0允许应用程序在不暴露用户凭据的情况下访问资源,降低了凭据泄露的风险。

  2. 用户体验好:用户只需授权一次,而无需每次都输入用户名和密码,极大提高了用户体验。

  3. 灵活的授权管理:用户可以控制授权的范围,并且随时可以撤销授权,保证了授权的灵活性和安全性。

  4. 跨平台支持:OAuth 2.0 可用于Web应用、移动应用、桌面应用等多种

环境,广泛支持。

七、总结

OAuth 2.0 是一种安全、灵活的授权协议,解决了在不同平台和服务之间安全地共享资源的问题。通过使用访问令牌,OAuth 2.0 可以确保第三方应用程序能够安全地访问用户的资源,同时用户对授权过程有充分的控制。

标签:令牌,访问,OAuth,授权,2.0,过程,客户端
From: https://www.cnblogs.com/gongchengship/p/18488309

相关文章

  • Ubuntu22.04 更换源
    1、在Ubuntu22.04中更新软件源,可以编辑/etc/apt/sources.list文件,将现有的源地址替换为新的源地址sudonano/etc/apt/sources.listdebhttp://mirrors.163.com/ubuntu/jammymainrestricteduniversemultiversedebhttp://mirrors.163.com/ubuntu/jammy-updatesmain......
  • __arm_smmu_tlb_sync调用过程
    __arm_smmu_tlb_sync调用过程这个函数分别在两处地方被调用:arm_smmu_tlb_sync_global#defineARM_SMMU_GR0(smmu) ((smmu)->base)#defineARM_SMMU_GR0_sTLBGSYNC 0x70#defineARM_SMMU_GR0_sTLBGSTATUS 0x74staticvoidarm_smmu_tlb_sync_global(structarm_smmu_devi......
  • 代码随想录算法训练营第五天| 面试题02.07.链表相交、leetcode142 环形链表II
    1.leetcode面试题02.07.链表相交题目链接:面试题02.07.链表相交-力扣(LeetCode)文章链接:代码随想录1.1代码跟着老师写的一个版本,自己能理解思路了,但是写的话可能还是有一些难#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,x):#......
  • 数学建模微分方程模型——火箭升空过程
    题目小型火箭初始质量为1400千克,其中包括1080千克燃料。火箭竖直向上发射时燃料以18千克/秒的速率燃烧掉,由此产生32000牛顿的恒定推力。当燃料用尽时引擎关闭。设火箭上升的整个过程中,空气阻力与速度的平方成正比,比例系数为0.4(千克/米)。重力加速度取9.8米/秒2.A.建立火箭......
  • jasypt的版本问题:从2.0升级为3.0版本会发生报错:Failed to bind properties under ‘sp
    目录1.详细的报错信息2.解决方案3.那为什么这样解决呢?4.补充BindException异常4.1什么是属性绑定?4.2 为什么会出现BindException?4.3BindException的常见场景4.4如何解决BindException?    由于昨晚写完一篇关于SpringBoot集成jasypt对敏感信息进行加......
  • tauri2.0-admin-vue3+element-plus客户端后台管理系统-源码版
    基于Tauriv2+vue3+ElementPlus+Echarts首款重磅桌面端后台管理系统Exe解决方案Tauri2Vue3Admin,正式完结了。趁着周末,录制了一个源码版演示视频。【源码版】tauri2.0+vite5+element-plus中后台管理系统解决方案技术栈编码器:vscode技术框架:tauri2.0+vite5.4.8+vue3.5......
  • openvpn2.0.9搭建和windows客户端拨号连接vpn,并用xshell连接机房只有内网的服务器
    openvpn2.0.9搭建和windows客户端拨号连接vpn,并用xshell连接机房只有内网的服务器如果对运维课程感兴趣,可以在b站上、csdn或微信视频号上搜索我的账号:运维实战课程,可以关注我,学习更多免费的运维实战技术视频1.openvpnserver服务器的安装、配置和服务启动:vpnserver服务器:(......
  • ArkWeb页面拦截与自定义响应 - 控制加载过程
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。简介在Web应用开发中,有时我们需要对......
  • 初探AI之got-ocr2.0大模型本地部署与遇到的各种坑处理
    一、环境搭建1.安装cuda,本人使用的是12.1版本,下载地址:https://developer.nvidia.com/cuda-12-1-1-download-archive2.安装conda3,https://blog.csdn.net/m0_73634846/article/details/1363783503.准备代码环境原文:https://mp.weixin.qq.com/s/PQVrlr5FoVb89Mivzi7pLA顺序执......
  • 四、扩散模型(Diffusion Model)的测试过程
    测试过程也叫采样过程,是从噪音\(\mathbf{x}_T\)中慢慢去噪,最终生成图片的过程目录1.扩散模型的测试过程测试过程第1步测试过程第3步测试过程第4步1.扩散模型的测试过程在论文中,扩散模型的测试过程如下测试过程第1步生成噪音\(\mathbf{x}_T\)测试过程第3步生成噪音\(\m......