什么是OAuth 2.0?

VIP什么是OAuth 2.0?
OAuth2.0是一种授权协议而非登录协议,核心思想是通过令牌(Token)而非密码实现安全授权。它涉及三个关键角色:用户、第三方应用和身份提供商(IdP)。最常用的授权码流程(AuthorizationCode Flow)通过浏览器三方对话,确保用户密码只提供给IdP而非第三方应用。OAuth2.0提供四种授权方式,其中授权码和客户端凭证是当前主流,而隐式和密码模式已不推荐。需要注意的是,OAuth2.0解决的是授权问题,身份认证需通过OpenID Connect实现。该协议通过临时令牌机制,实现了&qu
开通可读全文 ·1.1k 人阅读
最低0.47元/天 解锁文章

这张图想表达的是:OAuth 2.0 不是“登录协议”,而是一个“授权协议”——让你在不把密码交给第三方应用的前提下,把你在某个平台上的一部分权限(数据/操作)“临时借给”另一个应用。


1) OAuth 2.0 解决什么问题?(一句话)

你想用「某网站/某App」去访问你在「谷歌/微信/GitHub」上的数据或能力,但你不想把账号密码给那个网站/App。OAuth 2.0 就是这个“安全借权限”的标准做法。


2) 图里说的 3 个角色(最关键)

图里把 OAuth 拆成 3 个实体:

  1. User(用户 / Resource Owner)
    数据主人(比如你:你的邮箱、头像、联系人、云盘文件…)

  2. Server(第三方应用 / Client)
    你正在使用的那个服务(比如某个网站想读取你的 Google 资料)

  3. IdP(身份提供商 / Authorization Server)
    真正管你身份、能发放授权的“平台”(比如 Google、GitHub、Microsoft…)

    它负责:让你登录、让你点“同意授权”、然后发令牌给第三方应用


3) 核心思想:不给密码,给“令牌”(Token)

  • 密码(Password):相当于你家钥匙 + 全权限,给出去就麻烦了。

  • 访问令牌(Access Token):相当于“临时门禁卡”,只允许做被授权的事,并且通常有过期时间。

  • (常见还有)刷新令牌(Refresh Token):Access Token 过期后,用它去换新的 Access Token(不必让你反复点同意/登录)。

另外还有个重要概念:Scope(授权范围)
比如:只允许读头像 profile,不允许读邮件;只允许读,不允许写。


4) 图右下的重点:Authorization Code Flow(授权码流程)

这是 OAuth 2.0 最经典、最常用的流程(也是现在最推荐的主流之一)。

按图里的“浏览器三方对话”翻译成通俗步骤:

  1. 你在第三方应用里点:“用 Google 授权访问我的数据”

  2. 第三方应用把你重定向到 Google(IdP):
    “这位用户要授权我访问哪些权限(scopes)”

  3. 你在 Google 页面登录 + 看清楚权限提示 + 点同意

  4. Google 不把 Token 直接给浏览器里的第三方应用,而是先给一个:Authorization Code(授权码)

  5. 第三方应用(服务器端)拿这个授权码去找 Google 换取 Access Token(以及可能的 Refresh Token)

  6. 第三方应用拿 Access Token 去调用资源接口:
    比如 GET /my-data,最终把数据返回给你

你全程只把密码输入给 Google(IdP),第三方应用根本拿不到你的密码 —— 这就是 OAuth 最核心的安全点。


5) 图里列的 “4 种 OAuth Flow” 是什么(以及现在用不用)

图中列了 4 种常见授权方式:

  1. Authorization Code(授权码) ✅ 主流推荐

    • 现在通常搭配 PKCE(尤其移动端/桌面端/SPA)更安全

  2. Client Credentials(客户端凭证) ✅ 常用于“服务访问服务”

    • 没有用户参与,比如后端服务调用后端服务(机器对机器)

  3. Implicit(隐式) ⚠️ 现在基本不推荐/逐渐弃用

    • 因为把 token 直接暴露在前端环境里,风险更高

  4. Resource Owner Password(密码模式) ❌ 基本不推荐/已被淘汰思路

    • 让用户把密码交给第三方应用,等于回到老问题


6) 很多人会混淆的点:OAuth ≠ 登录

  • OAuth 2.0 解决的是“授权(Authorization)”:允许第三方做哪些事。

  • 如果你想实现“用 Google 登录”(知道“你是谁”),通常会用:OpenID Connect(OIDC)
    OIDC 是建立在 OAuth 2.0 之上的“身份层”,会返回 ID Token(告诉你用户身份信息)。


7) 用一个生活类比收尾

  • 你(User):房主

  • Google(IdP):物业/门禁系统

  • 第三方应用(Server/Client):维修工

  • OAuth 授权:你去物业那边刷脸确认“允许维修工进客厅修灯但别进卧室”,物业给维修工一张只开客厅门、半小时有效的门禁卡(token)。维修工从此不用你家钥匙(密码)。

OAuth 2.0 代码示例

OAuth 2.0 有多种授权流程(Grant Types),下面我用 Python 语言提供几个常见流程的代码示例。这些示例基于 Requests-OAuthlib 库(一个流行的 Python OAuth 库),假设你已经安装了它(pip install requests-oauthlib)。代码中会使用占位符如 your_client_id,在实际使用时需要替换为你的客户端 ID、密钥等(从服务提供商如 Google、GitHub 获取)。

我将重点解释 Authorization Code Grant Flow(授权码流程),这是最安全、最常用的流程,适合 Web 应用。然后简要提供其他流程的示例。每个示例包括导入、设置和步骤说明。


1. 授权码授予流程(授权码流程)

这个流程涉及用户重定向到授权服务器登录,然后回调获取令牌。适合需要用户交互的场景,比如用 Google 登录你的 App。

步骤说明:

  • 创建 OAuth2Session 对象。
  • 生成授权 URL,让用户访问并授权。
  • 用户授权后,输入回调 URL(实际 Web App 中用服务器处理)。
  • 用授权响应换取访问令牌。
  • 用令牌访问受保护的资源。
Python
# 导入必要的库
from requests_oauthlib import OAuth2Session

# 配置你的客户端信息(从服务提供商获取)
client_id = 'your_client_id' # 你的客户端 ID
client_secret = 'your_client_secret' # 你的客户端密钥
redirect_uri = 'https://your.callback/uri' # 你的回调 URL

# 定义权限范围(scope),根据提供商调整
scope = [
 'https://www.googleapis.com/auth/userinfo.email', # 示例:Google 的 email 权限
 'https://www.googleapis.com/auth/userinfo.profile' # 示例:Google 的 profile 权限
]

# 创建 OAuth2Session 对象
oauth = OAuth2Session(
 client_id,
 redirect_uri=redirect_uri,
 scope=scope
)

# 生成授权 URL(authorization_url)和状态(state,用于防 CSRF)
authorization_url, state = oauth.authorization_url(
 'https://accounts.google.com/o/oauth2/auth', # 示例:Google 的授权端点
 access_type="offline", # 请求离线访问(可选)
 prompt="select_account" # 提示用户选择账号(可选)
)

# 提示用户访问 URL 并授权(在实际 Web App 中,重定向用户)
print(f'请访问 { 
           authorization_url} 并授权访问。')

# 用户授权后,输入完整的回调 URL(实际中由服务器捕获)
authorization_response = input('请输入完整的回调 URL: ')

# 用授权响应换取令牌
token = oauth.fetch_token(
 'https://accounts.google.com/o/oauth2/token', # 示例:Google 的令牌端点
 authorization_response=authorization_response,
 client_secret=client_secret
)

# 现在可以用令牌访问受保护的 API
r = oauth.get('https://www.googleapis.com/oauth2/v1/userinfo') # 示例:获取用户信息
print(r.json()) # 输出响应

注意:这个是命令行版本,用于演示。在真实 Web 应用(如 Flask/Django)中,你需要处理 HTTP 重定向和回调路由。令牌(token)包含 access_token,可用于后续 API 调用。

2. Client Credentials Grant Flow(客户端凭证流程)

这个流程不涉及用户,直接用客户端凭证换取令牌。适合服务器间通信或后台服务。

步骤说明:

  • 创建 BackendApplicationClient。
  • 用客户端 ID 和密钥直接获取令牌。
  • 无需用户交互。
Python
# 导入必要的库
from oauthlib.oauth2 import BackendApplicationClient
from requests_oauthlib import OAuth2Session

# 配置客户端信息
client_id = 'your_client_id'
client_secret = 'your_client_secret'

# 创建客户端
client = BackendApplicationClient(client_id=client_id)
oauth = OAuth2Session(client=client)

# 获取令牌
token = oauth.fetch_token(
 token_url='https://provider.com/oauth2/token', # 替换为实际令牌端点
 client_id=client_id,
 client_secret=client_secret
)

# 用令牌访问 API
r = oauth.get('https://provider.com/protected-resource')
print(r.json())
VIP OAuth使用教程(一):初识OAuth 一、OAuth介绍   OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。   OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源。 二、OAuth2 角色 OAuth 2 标准中定义了以下几种角色: 资源... 开通可读全文·8k 阅读·5 点赞·24 收藏 阅读全文

相关推荐

OAuth协议详解,OAuth1.0到OAuth2.0(总结)

什么是OAuth协议 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。简单来说就是提供除了"账户密码"验证方式以外的验证授权方式。

zhangxiaoxiao9527的博客 3397

什么是OAuth 2.0?OAuth 2.0的工作流程是什么?与OAuth 1.0有哪些区别?

OAuth是一种常用的授权框架,使网站和web应用程序能够请求对另一个应用程序上的用户账户的有限访问。OAuth允许用户在不向请求的应用程序公开其登录凭据的情况下授予此访问权限。这意味着用户可以调整他们想要共享的数据,而不必将其账户的完全控制权交给第三方。集成需要从用户账户访问某些数据的第三方功能(设计之初的场景)。例如,应用程序可能会使用OAuth请求访问你的电子邮件联系人列表,以便建议与之联系的人员。提供第三方身份验证服务(广泛使用的场景),允许用户使用他们在不同网站上的账户登录。

所有成功的背后,都是痛苦的坚持,所有的痛苦,都是傻瓜般的不放弃! 1765

OAuth2.0介绍,OAuth2.0与OAuth 1.0对比

OAuth概念 OAuth目前已经成为互联网标准协议 字面意理解:open authorization 开房授权,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用 例如: OAuth授权过程 在认证和授权的过程中涉及的三方包括: 1、服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表。例如:上图中...

lizhenglyg的博客 740

OAuth2.0 全面介绍

OAuth 是一种授权协议, 通过他, 用户可以授权第三方应用访问自己保存在资源服务器上的资源。 OAuth 目前使用的版本是2.0。

oscar999的专栏 1923

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2539

问题解决:打开VMware创建的虚拟机,电脑立刻蓝屏并重启

VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credenti

weixin_55118477的博客 3万+

iTunes登录协议逆向与自动化实现

本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。

weixin_26938645的博客 924

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。 添加getchar();代码块解决无法查找或打开PDB文件。 错误提示: “Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “Pro...

m0_46523403的博客 6408

SimpleITK图像基础(一)——3D Resampling

文章目录前言基于SimpleITK进行实现 前言 进入深度学习网络之前需要进行统一数据集,这个时候需要对这些数据集进行重新采样,即假设各向同性体素并重新定向它们,以便可以读取所有图像的像素矩阵。 在将方位变换成一致时,可以用DICOMOrientImageFilter过滤器,可以将 DesiredCoordinateOrientation设置为你想要变换的方位,它将计算出所需的置换顺序并根据需要执行翻转以接近所需方向。 基于SimpleITK进行实现 workflow如下: step 1:首先运行DICOM

YYY_77的博客 2012

【实战教程】BMAD-METHOD 入门教程:用 AI 组建你的“七人开发团队”

简单说,BMAD-METHOD 就像一个会自己运转的“AI 软件公司”。它不是某个单一应用,而是一种AI 工作流方法论—— 把一个项目拆解成多个角色(产品、架构、前后端、测试、运维等),每个角色由一个 AI 智能体负责协作,就像你真的在带一个 7 人团队。GitHub 项目地址 👉目前 Star 数已经达到了恐怖的 20k,可见这套方法的影响力不小。BMAD-METHOD 的核心理念不是“生成代码”,而是“自动化协作”。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1610

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解——windows应急响应篇

保护数据,捍卫安全,展现技能,赢得荣耀!全国职业技能大赛-信息安全与评估大赛,挑战你的技术,揭示黑客的秘密!加入我们,成为信息安全的守护者!

人若无名,便可专心练剑 900

PX4从放弃到精通(五):PX4中的姿态表示方法及转换关系

文章目录机体坐标系与地理坐标系一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 机体坐标系与地理坐标系 在实际应用中,加速度计的测量轴是由运动平台安装固定此器件的轴向决定的。这些坐标轴就形成了载体坐标系,定义如下: 坐标原点设在载体质心(这样可简化运动方程的推导); y轴指向载体前方,称为横滚轴,横滚角以y轴为起始旋转轴而得到,符合右手定则; x轴与y轴夹角90°,指向载体横向,称为俯仰轴,俯仰角以x轴为起始旋转轴而得到,符合右手定则; z轴与x轴、y轴构成右手笛卡儿坐标系,指向载体垂直方向

超维空间科技的博客 8104

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

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

上一篇: 什么是死锁?
下一篇: PKCE的授权码流程

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
sonadorje
博客等级 码龄17年 101粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值