OAuth2 协议及其四种授权模式

OAuth2的四种授权方式 OAuth2四种授权方式 阅读详情

官方资料置顶,本篇文章主要结合官方资料与自己的使用经验对 OAuth2 协议做一个简单的记录。

部分翻译解释可能存在问题,如果发现了,欢迎及时在评论区向博主反馈。

官网

OAuth2 协议官方 pdf

What is OAuth2 ?

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

关键词: 开源协议、安全授权、简单、标准

Why ?

为了解决以下问题

  • 第三方应用程序需要存储资源所有者的凭据供以后使用,通常是明文密码
  • 哪怕密码校验不安全,服务器还是需要支持密码身份验证
  • 第三方应用程序获得对资源所有者受保护资源的过于广泛的访问,使得资源所有者无法限制持续时间或访问有限的资源子集
  • 资源所有者不能在不撤销对所有第三方的访问的情况下撤销对单个第三方的访问,而且必须通过更改第三方的密码来撤销访问
  • 任何第三方应用程序的安全问题都会导致最终用户的密码和所有受该密码保护的数据受到损害
OAuth2 中的角色
  • Resource Owner (资源所有者)

    能够授予对被保护资源的访问权限的实体。当资源所有者是个人时,它被称为最终用户

  • Client (第三方应用)

    代表资源所有者并经其授权提出受保护资源请求的应用程序。

  • User-Agent (用户代理)

    Web 浏览器就是一个典型的 User-Agent

  • 服务提供商

    • Authorization Server (授权服务器)

      在成功验证资源所有者并获得授权之后,发出访问令牌的服务器将向客户端发出访问令牌

    • Resource Server (资源服务器)

      存储获取受保护资源的服务器,能够使用访问令牌接收和响应受保护的资源请求

Protocol Flow

OAuth2-1

( A ) 客户端向资源所有者请求授权,授权请求可以直接向资源所有者提出,但是更好的做法是通过 Authorization Server 做中介。在授权码模式下就是将用户引导到 Authorization Server 进行确认。

( B ) 客户端接收 Authorization Grant,它是代表 Resource Owner 授权的凭据,使用规范的四种授权类型中的一种或者使用扩展授权类型中的一种来表示。授权类型取决于客户端使用的请求授权的方法和 Authorization Server 支持的类型。

( C ) 客户端通过请求向 Authorization Server 进行身份认证且提供 Authorization Grant 来请求 Access Token。

( D ) Authorization Server 通过对客户端进行身份认证,校验 Authorization Grant,如果有效,发出 Access Token。

( E ) 客户端使用 Access Token 向 Resource Server 请求受保护的资源。

( F ) Resource Server 校验 Access Token,如果有效,满足请求。


四种授权类型
Authorization Code (授权码模式)

OAuth2-2

( A ) 客户端将用户代理引导到 Authorization Server 来启动整个授权流程。客户端包括 Client Identifier,Request Scope,Local State,Redirection URI (授权服务器在授予(或拒绝)访问权限后将用户代理发送回的重定向URI)。

( B ) Authorization Server (通过用户代理) 对资源所有者进行身份验证,并确定资源所有者是否授权或拒绝客户端的访问请求。

( C ) 假设 Resource Owner 授予访问权限,Authorization Server 使用先前提供的重定向URI(在请求中或在客户端注册期间)将用户代理重定向回客户端。重定向URI携带 Authorization Code 和客户端先前提供的任何本地状态。

( D ) 客户端使用步骤 ( C ) 获取到的 Authorization Code 向 Authorization Server 的令牌端点请求 AccessToken。发出请求时,Authorization Server 会对客户端进行身份验证。请求需要携带 Authorization Code 与获取 Authorization Code 时的重定向URI。

( E ) 授权服务器对客户端进行身份验证,验证 Authorization Code,并确保收到的重定向URI与步骤(C)中用于重定向客户端的URI相匹配。如果有效,授权服务器会发出 AccessToken、Refresh Token(可选)。


Implicit (简化模式)

OAuth2-3

( A ) 客户端将用户代理引导到 Authorization Server 来启动整个授权流程。客户端包括 Client Identifier,Request Scope,Local State,Redirection URI (授权服务器在授予(或拒绝)访问权限后将用户代理发送回的重定向URI)。

( B ) Authorization Server (通过用户代理) 对资源所有者进行身份验证,并确定资源所有者是否授权或拒绝客户端的访问请求。

( C ) 假设 Resource Owner 授予访问权限,Authorization Server 使用前面提供的重定向URI将用户代理重定向回客户端。重定向URI携带URI片段中的 Access Token。

( D ) 用户代理通过向 Web 托管的客户端资源(不包括每个片段)发出请求来遵循重定向指令。用户代理在本地保留片段信息。

( E ) Web托管的客户端资源返回一个网页(通常是带有嵌入脚本的HTML文档),能够访问完整的重定向URI,包括用户代理保留的片段,并提取包含在其中的访问令牌(和其他参数)。

( F ) 用户代理在本地执行由 Web 托管的客户端资源提供的脚本,该脚本提取访问令牌。

( G ) 用户代理将访问令牌传递给客户端。


Resource Owner Password Credentials (密码模式)

OAuth2-4

( A ) Resource Owner 将用户名、密码提供给客户端。

( B ) 客户端使用 Resource Owner 提供的用户名、密码向 Authorization Server 请求 Access Token。Authorization Server 收到请求时,会同时对客户端进行身份验证。

( C ) 授权服务器对客户端进行身份验证并验证 Resource Owner 凭据,如果有效,则发放 Access Token。


Client Credentials (客户端模式)

OAuth2-5

( A ) 客户端使用 Authorization Server 进行身份验证,并从令牌端点请求 Access Token。

( B ) Authorization Server 对客户端进行身份验证,如果有效,则发出 Access Token。


Refresh Token

OAuth2-6

( A ) 客户端通过请求向 Authorization Server 进行身份认证且提供 Authorization Grant 来请求 Access Token。

( B ) Authorization Server 通过对客户端进行身份认证,校验 Authorization Grant,如果有效,发出 Access Token。

( C ) 客户端使用 Access Token 向 Resource Server 请求受保护的资源。

( D ) Resource Server 校验 Access Token,如果有效,满足请求。

( E ) 重复步骤 ( C ) 和 ( D ),直到 Access Token 过期失效。如果客户端发现 Access Token 过期失效,客户端会去执行步骤 (G ); 否则,它可以尝试请求其他的受保护资源。

( F ) 使用无效的 Access Token 访问资源,Resource Server 会返回 Invalid Token Error。

( G ) 客户端通过请求向 Authorization Server 进行身份认证且提供 Refresh Token 来请求新的 Access Token。

( H ) The authorization server authenticates the client and validates the refresh token, and if valid, issues a new access token (and, optionally, a new refresh token). Authorization Server 通过对客户端进行身份验证并校验 Refresh Token 的有效性。如果通过,会发出一个新的 Access Token、Refresh Token(可选项)


OK,到了这里对 OAuth2 协议进行了简单的介绍和学习,后面在记录 SpringSocial 与 SpringSecurity 使用 Token 认证时会关联到这一块知识点,所以这里算是一个前置知识点吧。下一篇尽快把 SpringSocial 集成 QQ 登录完成.

=> To Be Contionued!

OAuth2.0四种授权模式以及Oauth2.0实战 Oauth2.0具有多种授权许可机制协议:授权码许可机制、客户端凭据机制、资源拥有者凭据机制(密码模式)和隐式许可机制。在源码中即可看到四种模式的实现类,还有一个RefreshTokenGranter则是刷新令牌,用于access_token失效时刷新过期时间。假如现在我需要实现手机验证码登录或者微信扫码登录等功能的时候,我们该如何处理呢?我们可以继承AbstractTokenGranter实现自定义授权模式。手机短信验证码模式@Slf4j@Override。 阅读详情

相关推荐

开放授权协议:Oauth2.0

简介 Oauth的全称是Open Authorization,是一个开放授权协议,它制定了一些标准,可以使得第三方应用无需使用用户名密码即可获得用户资源。目前很多应用都提供了第三方社交账号登录及绑定,而这背后使用的技术就是Oauth2.0. Oauth协议最新版本是Oauth2.0,也是目前使用最广泛的协议,所以后面介绍的Oauth主要是指Oauth2.0。 Oauth协议背景 随着分布式web service、开放平台和云计算使用的越来越多,第三方应用需要能访问到一些用户的私有资源。然而这些资源都是受保护

Heaven Wang 的专栏 3762

Oauth2协议详解

本文来说下什么是Oauth2 文章目录什么是OAuth2 什么是OAuth2 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。 ...

wh柒八九的博客 3618

OAuth 2.0协议学习

简介 OAuth通过引入授权层以及分离客户端角色和资源所有者角色来解决第三方授权中的问题。客户端获得一个访问令牌(一个代表特定作用域、生命期以及其他访问属性的字符串),用以代替使用资源所有者的凭据来访问受保护资源。访问令牌由授权服务器在资源所有者认可的情况下颁发给第三方客户端。客户端使用访问令牌访问托管在资源服务器的受保护资源。OAuth 2.0协议与OAuth 1.0协议实现细节没有太多关联。...

Uncle_Y的专栏 650

oauth2认证协议

oauth2模拟

qq_26105397的博客 823

在优快云学Golang场景化解决方案(OAuth2.0授权登录)

OAuth2.0 定义了四种授权方式,即授权码(Authorization Code)、隐藏式(Implicit)、密码式(Resource Owner Password Credentials)和客户端凭证(Client Credentials)。OAuth 2.0 是一种用于授权的开放标准,可以让用户授权第三方应用程序访问他们存储在另一个服务提供商上的资源,例如图片、文本等。这就是 OAuth 2.0 协议的流程,可以帮助第三方应用程序安全地访问用户存储在其他服务提供商上的资源。

YKM_2580的博客 1461

聊聊OAuth2.0和OIDC

[toc]]

1063

OAuth2 原理与机制详解及应用案例

OAuth2 是安全授权开放标准协议,能让第三方应用安全访问用户资源。包括资源拥有者、客户端、资源服务器和授权服务器。有多种授权模式,其中授权码模式常见。在 Spring Boot 中结合 JWT 实现短信验证登录。包括生成验证码、校验并生成令牌等。OAuth2 安全性很重要,需 HTTPS 传输、保护令牌、限制生命周期、基于作用域控制权限等,全方位保障授权安全与应用稳定。

J老熊 4364

嵌入式开发 DSP芯片运行方式(挖坑-填坑中-坑已平 :))

TMS320F28335 DSP 芯片 如何将运行代码放在不同的位置

FOOLCODE的专栏 1306

OAuth2.0的四种授权模式

1.什么是OAuth2 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。 2.应用场景 第三方应用授权登录:在APP或者网页接入一些第三方应用时,时长...

weixin_30849403的博客 1238

Cocos Creator发布微信小游戏:深度定制与去除默认加载页面的实践指南

本文详细介绍了如何使用Cocos Creator发布微信小游戏时去除默认加载页面的实践方法。通过修改构建配置和重写启动逻辑,开发者可以自定义加载体验,提升品牌一致性。文章还提供了进阶优化方案和常见问题解决方案,帮助开发者实现更专业的微信小游戏发布流程。

weixin_27972919的博客 571

提示词注入攻击全面解析与防御策略

提示词注入(Prompt Injection)是指攻击者通过精心构造的输入内容,操纵或欺骗AI系统执行非预期行为的技术手段。这种攻击类似于传统的SQL注入或XSS攻击,但其目标是AI模型的提示词处理机制而非数据库或网页。提示词注入利用了大语言模型的一个基本特性:它们被设计为遵循指令。攻击者通过在用户输入中嵌入特定指令,试图覆盖或绕过系统原有的安全限制和行为规则,让模型执行本不应该执行的操作。深度防御:实施多层次防御策略,不依赖单一安全措施持续更新:随着攻击技术的发展不断更新防御措施安全设计优先。

免责声明:本资料部分整理自合法网络公开渠道,部分为个人学习积累成果,仅作学习参考、学术交流使用。所收费用仅为资料搜集整理的时间劳务酬劳。版权归原作者及出版方所有,本人不承担相关版权及内容法律责任,若有侵权请告知,即刻删除处理。 4215

开放授权协议-OAuth2.0

一、OAuth协议简介 1.1 OAuth是什么? 1.2 OAuth协议特点 1.3 OAuth角色划分 二、OAuth2.0 2.1 概述 2.2 四种授权模式 2.3 应用场景 三、授权过程 四、接入步骤 五、协议总结 六、结束语

微信公众号:饺子泡牛奶 720

从‘眼花缭乱’到‘心中有数’:rs-fMRI统计分析全流程避坑指南(附DPABI操作截图)

本文详细解析了rs-fMRI统计分析的全流程,从质量控制到统计模型选择,再到多重比较校正和结果解读。特别针对DPABI软件操作中的常见陷阱提供实用指南,帮助研究者避免FDR和GRF校正等关键环节的错误,实现从数据混乱到清晰分析的转变。

weixin_33686714的博客 400

Springboot + oauth2 单点登录 - 原理篇

一、前言 1.什么是OAuth2? OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。 二、Oauh2详细介绍 1.OAuth2四种授权模式 授权码模式(authorization code) 密码模式(resource owner pass

qq_39749620的博客 6079

高通 Gen AI 推理扩展 (GENIE)(5):实战指南与Engine API深度解析

本文深入解析高通Gen AI推理扩展(GENIE)的Engine API核心功能与实战应用,涵盖引擎实例化、多引擎动态切换、性能调优及跨平台部署等关键技巧。通过详细代码示例和性能数据,帮助开发者高效利用GENIE进行AI推理,提升应用性能与稳定性。

weixin_29065959的博客 465

OpenClaw的引导配置(onboard)流程

脚本安装的直接安装完到引导配置界面,其他安装方式还可以直接命令到配置。

supersolon的专栏 1328

Oauth2基本介绍

OAuth2 一、什么是OAuth2 OAuth 2.0是目前最流行的授权机制,用来授权第三方应用,获取用户数据。 OAuth(开放授权)是一个关于授权的开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息(比如照片、视频、用户信息等),而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0。即完全废止了OAuth1.0。OAuth 2.0协议正式发布为RFC-6749。 OAuth2主要包含以下特

weixin_42272869的博客 1455

使用 Visual Studio Code 连接 ABAP On-Premise 系统做开发的详细配置步骤

本文详细介绍了如何在Visual Studio Code中通过ABAP Development Tools扩展连接ABAP On-Premise系统。关键步骤包括:通过Ctrl+Shift+P打开命令行面板选择「ABAP: New Destination...」创建RFC连接(仅支持SSO单点登录),选择本地SAPGUI中已有的系统,输入Client ID、语言和用户名(无需密码),最后将目标系统添加到工作区即可开始开发。文章强调了企业安全考虑下仅支持SSO的设计理念,并展示了连接配置的JSON格式示例。整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 997

Oauth2.0简述及企业实践

之所以写这篇文章,是因为最近做的项目是根据oa2.0协议做的,不是简单使用别人的三方登录,而是做这样的一个授权平台去让别人去用。并且也有朋友问这个东西相关的内容,因此在此总结。 1.这是什么协议? OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 2.0即完全废止了OAuth1.0。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之...

MClink的博客 923

解决:请求的资源[/xxx/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

解决:请求的资源[/xxx/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

念兮为美 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OAuth 2.0 ——授权码模式

OAuth 是一个关于授权(authorization)的开放网络标准,主要应用在第三方登录场景,目前的版本是2.0版。本文主要参考材料为: RFC 6749 阮一峰的网络日志《理解OAuth 2.0》 其实,阮一峰的文章基本上就是翻译的 RFC 6749 文档,卷面很整洁,让人看起来很舒服,但是,内容却不怎么样,前后有点接不上,翻译的不全面,有些地方也没有解释清楚,本文尽量做一些补充。还有一个问题

拖垃圾的专栏 4441

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Spring Security OAuth2.0 框架入门

Spring Security OAuth2.0 实现分布式认证授权

htx4ever 的博客 919

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SpringBoot 整合oauth2实现授权第三方应用

什么是OAuth2 OAuth(open authorization开放授权)是一个开放标准,允许用户授权第三方应用访问他们服务器资源,而不需要将用户名和密码提供给第三方应用。OAuth2.0是OAuth协议的延续版本,但是不向后兼容OAuth1.0,即完全废止了OAuth1.0。 快递员问题 我住在一个大型的居民小区 小区有门禁系统。 小区进入小区的时候需要输入密码。 我经常网购和点外卖,每天都有快递员来送货,我必须找到一个办法,让快递员通过门禁系统,进入小区 如果我把自己的密码告诉快递员,他就拥有了

u014365523的博客 1915

oAuth2

官方网站这里oAuth2 是标准,具体的实现有两个,SpringSecurity 和 apache shero。

lhg_55的博客 511

OAuth 2.0:现代互联网授权的基石

OAuth2.0是当前互联网最广泛使用的授权协议,它允许用户授权第三方应用访问资源而无需共享密码。该协议包含四个核心角色:用户、客户端、授权服务器和资源服务器,通过授权码、简化、密码和客户端凭证四种模式适应不同场景。OAuth2.0相比APIKey、SAML等机制更安全灵活,广泛应用于社交登录、API调用和企业系统集成。作为现代数字生态的基石,掌握OAuth2.0对开发者构建安全应用至关重要。

nielilijy的专栏 1098

oauth2实现单点登录

oauth2实现单点登录 电子书资源见 https://www.yuque.com/docs/share/37bd8227-eece-435a-9805-87254f4b34e9?# 《oauth2授权》 blog 地址 https://youngboy.vip oauth2是什么? OAuth2: OAuth2(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。 举个栗子:第三方网站登录,osc

youngboy的博客 4124
上一篇: SpringSecurity 下 Session 使用
下一篇: SpringSocial 开发 QQ 登录
Earth_Programer
博客等级 码龄11年 18粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值