OAuth2之概述

【OAuth2】OAuth2概述及使用GitHub登录第三方网站 OAuth 是一个开放的非常重要的认证标准/协议,允许用户授权第三方应用访问其存储在其他网站上资源,而无需将用户名密码提供给第三方网站的开放标准/协议。OAuth2 是 OAuth 的最新版本,同时也是被广泛应用的一个版本。我们在网站上常见的QQ登录,微信扫码登录,GitHub 授权登录就是基于 OAuth2.0 实现的。点击跳转。 阅读详情

一、OAuth 概念

开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 —— 维基百科

严格来说,OAuth2 不是一个标准协议,而是一个安全的授权框架。其详细描述系统中不同角色,用户,服务前端应用(如 API )以及客户端(如网站或APP)之间如何实现相互认证。

当前 OAuth 协议版本是 OAuth2.0,需要注意的是,OAuth2.0 并不向下兼容 OAuth1.0。

在生活中,比较常见的 OAuth2 的使用场景是授权登录,并且也广泛应用于 web、桌面应用和移动 APP 的第三方服务提供授权登录验证机制,以实现不同应用直接数据访问的权限。

二、OAuth2 重点名词介绍

在 OAuth2 标准中定义了以下四种角色:

  • 资源拥有者 (Resource Owner):

代表授权客户端访问本身资源信息的用户(User);

  • 客户端 (Client):

代表意图访问受限资源的第三方应用。

  • 资源服务器 (Resource Server):

代表托管了受保护的用户账号信息的服务器,它与认证服务器,可以是同一台服务器,也可以是不同的服务器;

  • 授权服务器 (Authorization Server):

代表验证用户身份然后为客户端派发资源访问令牌的服务器,即服务提供商专门用来处理认证的服务器;

三、OAuth2 运行流程

1. 流程分析

20191028-OAuth2-01.png

 

(配图来自阮一峰大佬)

大致流程概括就是:

  • (A)Authrization Request

用户打开客户端以后,客户端要求用户给予授权。

  • (B)Authorization Grant(Get)

用户同意给予客户端授权。

  • (C)Authorization Grant(Post)

客户端向授权服务器发送它自己的客户端身份标识和上一步中获得的授权(authorization grant),向认证服务器申请令牌。

  • (D)Access Token(Get)

认证服务器对客户端进行认证以后,确认无误,同意发放令牌(access token),授权阶段至此全部结束。

  • (E)Access Token(Post && Validate)

客户端使用令牌,向资源服务器申请获取资源。

  • (F)Protected Resource(Get)

资源服务器确认令牌无误,同意向客户端开放资源。

理解完上面整个流程以后,我们再看看下面这张图,能更加清晰理解 OAuth2 的整个运行流程:

20191028-OAuth2-02.png

 

(配图来自公众号前端修仙之路)

从整个流程可以看出,在 B 步骤最为关键,即需要获取到用户对客户端的授权(如我们在微信扫码登录时,点击“确定”按钮的步骤)。

有了这个授权以后,客户端才能拿到令牌,进而凭令牌向资源服务器获取资源。

2. 案例:微信登录

另外,微信登录的实现流程也类似:

20191028-OAuth2-03.png

 

(配图来自微信官方文档)

其整体流程为:

  1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据 code 参数;

  2. 通过 code 参数加上 AppID 和 AppSecret 等,通过 API 换取 access_token ;

  3. 通过 access_token 进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

3. OAuth2 优缺点

  • 优点:

适合快速开发实施,代码量少,API需要被不同APP使用,且每个APP使用方式也不同的情况。

  • 缺点:

学习和理解的成本比较大,并且 OAuth2 不是一个严格的标准协议,在实施过程中更容易出错。

四、OAuth2 四种授权模式

通过前面描述,可以知道OAuth 的核心就是向第三方应用颁发令牌。

OAuth 2.0 规定了四种获得令牌的流程。你可以选择最适合自己的那一种,向第三方应用颁发令牌。即以下四种授权方式:

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

注意:

不管哪一种授权方式,第三方应用申请令牌之前,都必须先到系统备案,说明自己的身份,然后会拿到两个身份识别码:客户端 ID(client ID)和客户端密钥(client secret)。

这是为了防止令牌被滥用,没有备案过的第三方应用,是不会拿到令牌的。

1. 授权码(authorization code)

即第三方应用先申请一个授权码,然后再用该码获取令牌。

适用于有后端的 Web 应用,授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。

这种方式也是最常用的流程,安全性最高。

整体流程

20191028-OAuth2-04.png

 

(配图来自阮一峰大佬)

步骤分析

  1. 用户从 A 网站跳转到 B 网站,请求用户确认授权,以获取授权码,其发送链接示意如下:
https://b.com/oauth/authorize?
       response_type=code&
       client_id=CLIENT_ID&
       redirect_uri=CALLBACK_URL&
       scope=read

其中:

response_type 参数表示要求返回授权码(code);

client_id 参数让 B 知道是谁在请求;

redirect_uri 参数是 B 接受或拒绝请求后的跳转网址;

scope 参数表示要求的授权范围(这里是只读);

  1. 在 B 网站中,当用户同意授权 A 网站,则 B 网站会携带授权码,重定向到 redirect_uri 参数指定的网址,就像下面这样:
https://a.com/callback?code=AUTHORIZATION_CODE
  1. A 网站获取授权码以后,在 A 网站后端中向 B 网站请求令牌:
https://b.com/oauth/token?
       client_id=CLIENT_ID&
       client_secret=CLIENT_SECRET&
       grant_type=authorization_code&
       code=AUTHORIZATION_CODE&
       redirect_uri=CALLBACK_URL

client_id 参数和 client_secret 参数用来让 B 确认 A 的身份( client_secret 参数是保密的,因此只能在后端发请求);

grant_type 参数的值是 AUTHORIZATION_CODE ,表示采用的授权方式是授权码;

code 参数是上一步拿到的授权码;

redirect_uri 参数是令牌颁发后的回调网址;

  1. B 网站接受请求并验证身份,身份验证通过后,会发放令牌。向redirect_uri 指定的网址,发送包含令牌 access_token 字段的JSON数据,流程完毕。

2. 隐藏式(implicit)

即隐藏授权码步骤,直接向前端发放令牌,也称授权码隐藏式。

整体流程

20191028-OAuth2-05.png

 

(配图来自阮一峰大佬)

步骤分析

  1. 用户从 A 网站跳转到 B 网站,要求授权用户数据给 A 网站使用。
https://b.com/oauth/authorize?
  response_type=token&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read

response_type 参数为 token,表示要求直接返回令牌。

  1. 用户在 B 网站同意授权给 A 网站。

当用户同意授权后,会跳转到 redirect_uri 参数指定的重定向地址,并将令牌作为 URL 参数传递给 A 网站。

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

token 参数就是令牌,A 网站因此直接在前端拿到令牌。

注意:

这里的令牌位置是 URL 锚点(即 # 号),而不是查询字符串,这是因为锚点不会发到服务器,避免泄露令牌的风险。

适用场景:

由于直接传递令牌不安全,因此常常适用在对安全要求不高的场景,并且令牌有效期非常短,例如会话期间(session)有效,关闭浏览器便失效。

3. 密码式(password)

即:对于信任的应用,可以携带约定的用户名和密码进行令牌申请。

流程分析

 

20191028-OAuth2-07.png

 

 

  1. A 网站使用 B 网站提供的用户名和密码,向 B 网站发起令牌请求。
https://oauth.b.com/token?
  grant_type=password&
  username=USERNAME&
  password=PASSWORD&
  client_id=CLIENT_ID

grant_type 参数是授权方式,这里的 password 表示"密码式"; username 和 password 是 B 的用户名和密码。

  1. B 网站验证身份后直接将令牌存在 JSON 数据中,作为 HTTP 相应返回令牌给 A 网站。

适用场景:

风险较大,一般适用在对应用高度信任的情况。

4. 客户端凭证(client credentials)

即:给出凭证让对方确认并提供令牌。

流程分析

  1. A 应用在命令行向 B 发出请求。
https://oauth.b.com/token?
  grant_type=client_credentials&
  client_id=CLIENT_ID&
  client_secret=CLIENT_SECRET

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

  1. B 网站验证身份后返回令牌。

这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌。

适用场景:

通过命令行请求令牌。

流程分析

20191028-OAuth2-06.png

 

五、使用令牌

当网站获取到令牌以后,接下来每个 API 请求都需要带上令牌,其做法是在请求的头信息中,将令牌添加 Authorization 字段中。

六、更新令牌

当令牌有效期到了,OAuth2 允许用户自动更新令牌,而不用让用户重新授权获取新令牌。

具体流程:

在 B 网站发放令牌时,一次性发放 2 个令牌,一个用于获取数据,一个用于获取新的令牌(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

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

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

VTK四视图联动避坑指南:解决vtkImagePlaneWidget窗宽窗位同步与切片序号更新的那些坑 本文详细解析了VTK四视图联动开发中的关键技术点与常见问题,包括切片位置同步、窗宽窗位同步的实现原理及回调机制设计。针对开发中遇到的回调事件不触发、渲染性能低下等问题,提供了实用的解决方案和优化技巧,帮助开发者高效构建医学影像和科学可视化应用。 阅读详情

相关推荐

SolidWorks 2022 学习(一)软件安装

接下来是安装SolidWorks,右键SolidWorks.2022.SP0.Premium.DVD.iso,选择装载。然后以管理员身份运行SolidWorks_Flexnet_Server目录下的server_install.bat。更改需要安装的产品,以及安装路径,并勾选接受条款,点击现在安装,会弹出如下窗口。然后以管理员身份运行setup.exe,开始安装solidworks。下载链接会在文章末尾给出,下载完成的文件如下图所示。双击注册表文件,然后点击确定。保持不动,点击确定,开始安装。

qq_38383364的博客 3125

微信oauth2授权登录实践

1、准备工作 微信公众平台测试号申请一个帐号,扫码登录 扫码关注一下,否则获取授权码时报错 授权成功回调地址redirect_url配置,可配置baidu.com,有些域名会有问题 绑定微信开发者账号 二、按照文档走oauth2授权码流程 1.获取授权码。scope为snsapi_base为静默模式及自动授权不会弹框,而snsapi_userinfo则必须显示点击确认授权按钮。redirecurl需要URLencode一下。 https://open.weixin.qq.com

MJ的博客 1万+

AI工作流革命:从n8n到Sora2,揭秘自动化视频创作的底层逻辑

本文深入探讨了AI工作流在自动化视频创作中的应用,重点介绍了n8n、Coze和Sora2的组合如何实现从链接输入到视频输出的全流程自动化。通过三层架构解析、关键技术模块优化及成本控制策略,这套方案显著提升了视频生产效率,适用于电商、热点追踪等多种场景。

gg901的博客 1081

oauth2基本概念

1.什么是oauth2 OAuth2.0介绍 OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方 应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他 们数据的所有内容。OAuth在全世界得到广泛应用,目前的版本是2.0版。 OAuth协议:https://tools.ietf.org/html/rfc6749 协议特点:简单:不管是OAuth服务提供者还是应用开发者,都很易于理解与使

qq_31211493的博客 1万+

深度学习|卷积神经网络

介绍卷积神经网络基本理论,包括卷积层、池化层和全连接层,并阐述LeNet卷积神经网络的构建过程。

weixin_58243219的博客 5720

手把手教你用STM32标准库写一个能OTA升级的Bootloader(附完整代码)

本文详细介绍了如何使用STM32标准库开发支持OTA无线升级的Bootloader系统,包括Flash分区规划、Bootloader核心实现、无线升级流程及安全校验机制。通过实战代码示例,帮助开发者快速掌握STM32固件升级技术,提升物联网设备的远程维护能力。

weixin_30181209的博客 262

OAuth2.0简介

OAuth2.0是目前使用非常广泛的授权机制,用于授权第三方应用获取用户的数据。 举例说明: 用户可以通过选择其他登录方式来使用百度,这里就使用到了第三方认证。 OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。......资源所有者同意 以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。 一、OAuth2中的角色 资源所有者 能够授予对受保护资源的访问权限的实体,如果资源的所有者为个人,也被成为最终用户 资源服务器 ...

weixin_54597234的博客 625

RS485两线制接线实战:从差分信号原理到Modbus避坑指南

本文深入解析RS485两线制接线的核心原理与实战步骤。从差分信号的抗干扰机制出发,详细拆解总线规划、屏蔽层接地、终端电阻安装等关键实操细节,并针对Modbus应用中常见的信号反射、极性接反、共模干扰等问题提供系统化的排查指南与解决方案,助力工程师构建稳定可靠的工业通讯网络。

7up55的博客 734

OAuth2简介

OAuth2简介

weixin_67677668的博客 1190

WOFOST作物模型(3):敏感性分析

使用TAGP(Total Above Ground Production),地上总产量TSUM1,temperature sum from emergence to anthesis,萌发至开花所需温度TSUM2,temperature sum from anthesis to maturity,开花至成熟所需温度SPAN,life span of leaves growing at 35 Celsius,生长温度为35度时的叶龄。

所有专家都曾始于新手 1145

Python爬虫实战:实时爬取东方财富网股票行情

东方财富网实时行情(价格、涨跌幅、成交量等)K线图、分时图、技术指标市盈率、换手率、总市值等指标相比某些收费API,东方财富网页端接口不需要登录、免费、响应快、封装清晰,适合爬虫实践。东方财富网股票数据接口分析实时数据抓取与字段提取数据结构化处理自动化批量抓取多线程加速采集数据可视化展示支持存储为CSV/Excel/数据库。

2201_76125261的博客 1万+

OAuth2.0概述

OAuth2.0概述 OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三 方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。OAuth在全世界得到广泛应用,目前的版本是2.0版。 OAuth协议:https://tools.ietf.org/html/rfc6749 协议特点: 简单:不管是OAuth服务提供者还是应用开发者,都很易于理解与使用; 安全:没有涉及

qq_43843037的博客 1万+

PyTorch实战(2)——使用PyTorch构建神经网络

在本节中,我们使用 PyTorch 在简单数据集上构建了一个神经网络,训练神经网络来映射输入和输出,并通过执行反向传播来更新权重值以最小化损失值,并利用 Sequential 类简化网络构建过程;介绍了获取网络中间值的常用方法,以及如何使用 save、load 方法保存和加载模型,以避免再次训练模型。

盼小辉丶的博客 1万+

I:OAuth 2.0 概述

前言:最近讨论园子里是否真末落的话题那可是沸沸扬扬啊!我就不凑这个热闹了!在此吐点最近在整的东西出来给大家! I:OAuth 2.0 概述 首先大家来看看国内新浪跟腾讯这两大头对OAuth 2.0是怎么个用官方语言去阐述的: 新浪:OAuth2.0是从2006年开始设计OAuth协议的下一个版本,OAuth2.0同时提供Web,桌面和移动应用程序的支持,并较1.0相比整个授权验证流程

bingqingsuimeng的专栏 833

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OAuth2.0--概述

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

吴声子夜歌的博客 404

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Oauth 2.0概述

传统授权方式 账号密码的授权方式 存在的问题: 1. 用户的账号、密码信息透漏给了第三方应用,导致安全问题; 2. 用户要收回授权,只能通过修改密码来实现,此时如果有多个第三方应用,所有授权一起被收回 3. 很难安全的实现对不同的第三方应用给予不同的权限 Oauth原理 需要解决的问题: 1. 怎么识别第三方应用身份,怎么保证第三方应用身

818

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SpringSecurtiy OAuth2 (1) 概述

简单介绍 Spring Security OAuth 2.0 的概念

O_o 1342

OAuth 2.0 概述

前言:最近讨论园子里是否真末落的话题那可是沸沸扬扬啊!我就不凑这个热闹了!在此吐点最近在整的东西出来给大家! I:OAuth 2.0 概述 首先大家来看看国内新浪跟腾讯这两大头对OAuth 2.0是怎么个用官方语言去阐述的: 新浪:OAuth2.0是从2006年开始设计OAuth协议的下一个版本,OAuth2.0同时提供Web,桌面和移动应用程序的支持,并较1.0相比整个授权验证流程

wang_quan_li的专栏 721

Oauth2.0登录鉴权概述

概述 OAuth2.0(开放授权)是一个开放标准,用户授权后,第三方应用无需获取用户的用户名和密码就可以访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表)。 Access Token:用户身份验证和授权的凭证。第三方应用在调用开放平台开放API之前,首先需要获取Access Token。 使用授权前准备 您需要创建一个应用以获取 client_id 和 client_sec...

qq_17439973的博客 6094

OAuth2.0 基础概述

转自:https://www.cnblogs.com/Irving/p/4134629.html web:http://oauth.net/2/ rfc:http://tools.ietf.org/html/rfc6749 doc:http://oauth.net/documentation/ code:http://oauth.net/code/ OAuth2.0授权类型 OAuth2.0协议定...

s297485987的专栏 439

OAuth 2.0 Webapp流程概述

在最近的几篇博客中,我一直在谈论使用Spring Social访问诸如Facebook和Twitter之类的软件即服务(SaaS)提供程序。 你们中的有些人可能已经注意到,我的示例代码可能有些薄弱,因为我试图描述后台发生的事情以及Spring Social为您所做的事情。 到目前为止,我对OAuth进行了概述,将其定义为您的应用程序需要持有访问令牌,以便它可以从SaaS提供程序访问用...

danpu0978的博客 199

security、oauth2.0相关概述

oauth2.0及security的区别及联系

qq_31671187的博客 1204

OAuth2协议概述(四种模式)

一、什么是OAuth2 OAuth 2.0 是一个基于令牌 Token 的授权协议,通过它我们可以在不暴露账户和密码的情况下授予客户应用有限的数据访问权限。它解藕了认证和授权,同时它是事实上的安全框架,它能支持服务与服务,App、单页面应用与后端服务等很多应用场景。 不难理解,OAuth的作用就是让"客户端"安全可控地获取"用户"的授权。 OAuth2是用来允许用户授权第三方应用访问他在另一...

欢迎光临 1919

OAuth2(1)--概述

文章目录1.OAuth2概述1.1 解决什么问题1.2 OAuth2是什么1.3 OAuth2正式定义1.4 OAuth2 的典型模式与选型1.4.1 授权码模式--最复杂、最安全、用的最多1.4.2 简化模式--适用单页应用1.4.3密码模式--client是自己家的应用时1.4.4 客户端模式--比如docker client拉取镜像Refresh Token1.4.5 模式选型2.实验2.1 授权码模式2.2 简化模式3.参考资料 1.OAuth2概述 1.1 解决什么问题 问题1:基于开放系统间授

tuohongweng3138的博客 385
上一篇: SpringBoot之配置文件读取
下一篇: 工具类库之Hutool
猎户星座。
博客等级 码龄12年 2547粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值