【OAuth2】为什么授权码模式更安全?为什么使用授权码比直接返回token更安全?

news2024/9/27 6:46:45

OAuth2

  • 什么是OAuth2
    • OAuth2的主要角色
    • OAuth2的工作原理
    • OAuth2的授权模式
    • 为什么授权码模式更安全?

什么是OAuth2

简而言之:安全的用你的其他账号登陆一个新网站(甚至访问你在其他网站上存储的私密资源(如头像、照片等),而不会暴露你的账号密码的一种方式。

OAuth2的主要角色

  • Client :第三方应用。(当前想登录的应用)

  • Resource Owner:资源所有者。(本人)

  • Authorizetion Server :授权服务器。(之前的其他账号的授权服务器)

  • Resource Server :资源服务器。(之前的其他账号的资源服务器)

OAuth2的工作原理

第三方应用必须在资源所有者的同意下,向服务器请求令牌,然后拿着令牌去访问资源。
总结:OAuth 的核心就是向第三方应用颁发令牌。

OAuth2的授权模式

  1. 授权码模式:常见的第三方平台登录功能基本都是使用这种模式。(安全性高)
  2. 简化模式:简化模式是不需要第三方服务端(客户端)参与,直接在浏览器中向授权服务器申请令牌(token),如果网站是纯静态页面,则可以采用这种方式(不安全)。
  3. 密码模式:密码模式是用户把用户名/密码直接告诉客户端,客户端使用在这些信息项授权服务器申请令牌(token)。这需要用户对客户端高度信任,比如:第三方应用和授权服务器就是同一家公司。
  4. 客户端模式:客户端模式是指客户端使用自己的名义而不是用户的名义向授权服务器提供申请授权。应用场景: 比如自己家的产品。

为什么授权码模式更安全?

都说授权码模式更安全?那么到底是怎么安全的?

RFC 6749: https://datatracker.ietf.org/doc/html/rfc6749#section-4.1
在这里插入图片描述

众说纷纭,作者的学习历程是这样的:

  1. 为什么授权码模式比直接返回Access Token 更安全?
    网友回答: 授权码通过浏览器返回,而服务器携带授权码通过后端请求获取Access Token,不会暴露在前端。
  2. 那其他服务器携带授权码是否也能获取Access Token?
    网友回答:授权码与发起请求的URL是关联的,所以另一个网站使用你的授权码是无法成功得到令牌的。
  3. 作者不清楚是否可以伪造请求的URL,从而利用授权码获取Access Token?
    然后看到相关评论指路微信开放平台,如下图。

在这里插入图片描述

在RFC 6749 流程中,我们可以看到,在获取授权码的A步骤中,携带了Client本身的识别码,即Client_id,所以授权服务器知道请求方的身份。然后在微信开放平台中,请求Access Token的D时,携带了app_id和app_secret,因此授权服务器可以验证请求方的身份,进而对其下发Access Token。

总结

  1. 如果请求无法通过其他方式伪造,那么授权码 + URL 可以由授权服务器验证并颁发Access Token,但作者认为这种方式不可行。
  2. 请求Access Token时,携带了app_id和app_secret
    由于Client想要接入比如微信的登录时,必然要在微信开放平台提交应用审核通过后获得appid和appSecret,这两个凭证应该只有微信开放平台和Client得知,因此,Client可以通过appid和appSecret和授权码获取Access Token。


参考:

【阮一峰大佬的Blog】https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
【RFC 6749】https://datatracker.ietf.org/doc/html/rfc6749#section-4.1
【微信快速登录功能的说明】 https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html


【仅代表作者个人观点,欢迎大家讨论自己的理解,如有错误,欢迎指正!】


【如果对你有所帮助,希望可以点赞收藏支持一下!】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金融大模型:数据治理与AI应用创新的新时代

金融大模型:数据治理与AI应用创新的新时代 前言金融数据治理与应用创新的新时代 前言 在当今数字化飞速发展的时代,金融行业也在经历着深刻的变革。金融大模型作为一种新兴的技术力量,正在逐渐改变着金融数据的治理和应用方式。它不仅为金融…

利用机器学习推动 vSOC 检测

我们讨论了汽车 API 如何成为智能移动生态系统的主要攻击媒介之一。与此相关的风险是显而易见的。如果威胁行为者能够大规模远程利用 API,他们将有能力损害品牌或提出赎金请求。当然,Splunk 平台的强大之处在于能够从任何数据大规模创建任何用例。在本博客中,我们将深入研究…

使用python基于fastapi发布接口(二)-连接mysql数据库查询数据

上一章在这里 操作 MySQL 数据库使用 mysql-connector-python 库 安装mysql-connector-python pip install mysql-connector-python 代码编写在原来代码基础上添加数据库连接配置 from typing import Union from fastapi import FastAPIapp = FastAPI(

【Qt】常见控件 —— QPushButton | QRadioButton

文章目录 QPushButtonQPushButton 的基本功能介绍QPushButton 添加快捷键通过图片实现 上下左右实现方向键的槽函数设置快捷键连发功能 QRadioButtonQRadioButton 的基本功能介绍通过 QRadioButton 选择性别具有排他效果禁用 选项 槽函数的使用情况基于 QRadioButton 实现一个简…

用AppleScript做macOS UI自动化

用AppleScript做macOS UI自动化 一、定位到System Setting → General → Login Items& Extensions 页面1. 获取页面锚点,以便直接滑动到锚点区域2. 滑动到Extensions 区域 二、根据名称找到元素,再点击元素的按钮三、获取元素位置并点击 一、定位到…

人工智能边缘计算应用教学解决方案

一、引言 随着物联网(IoT)技术的飞速发展,数据生成量呈爆炸式增长,对数据处理速度、实时性和隐私保护的需求日益迫切。在此背景下,人工智能(AI)与边缘计算的结合成为了解决这一挑战的关键技术路…

牛客周赛 Round 57 解题报告 | 珂学家

前言 题解 难度比较适宜,这场周赛出的不错。 A. 小红喜欢1 题型: 签到语法 arr list(map(int, input().split()))print (arr.index(1) 1)B. 小红的树切割 思路:思维 统计边两端为同一颜色的边数即可 n int(input())s input()res 0 for i in r…

python爬虫,使用pyppeteer异步,爬取,获得指定标签内容

获得指定 #pip install pyppeteer,使用 Pyppeteer(异步方案) import asyncio from pyppeteer import launch async def main():browser await launch()page await browser.newPage()await page.goto(http://xxx/#/login)# 等待页面加载完成await page…

企业本地部署大型语言模型(LLMs)构建本地垂直领域知识库的策略|空天防御

0 引言 在数字化转型的浪潮中,传统企业面临着前所未有的机遇与挑战。随着大数据、云计算和人工智能技术的发展,企业积累的私有数据成为了潜在的金矿,等待着被挖掘和利用。大型语言模型(LLMs)作为当前人工智能领域的前…

基于深度学习的手势识别系统

基于深度学习网络的手势识别系统 完整源码数据集报告PPT全套信息 【python设计开发】基于深度学习的手势图像识别处理系统 【包括】代码 PPT 报告 2 需求分析 2.1要求 (1)用Python语言实现程序设计; (2)初识深度学习…

个人网站无缝切换图片格式到 webp 或 avif

当你点进来,恭喜你来对地方了,我写的东西从来都是小白向的(把自己当小白),不会故作厉害写的云里雾里让人看不懂,既然发出来就会有人看到,不是每个人都是程序员懂技术的。 项目 为什么图片格式要…

QT绘制折现图

做一个小工具,需要根据数据绘制折线图,同时拥有方法缩小拖到等功能 运行结果: 原图: 滚轮缩小 滚轮放大 左移右移 鼠标悬停显示点的坐标 源代码 实现 .pro 使用QChart 加入其对应的模块 QT charts customchartview:继承chartView 重写了鼠标点击,鼠标释放,鼠标移…

MAC +win10 笔记本, OBS 桌面音频不起作用 问题 总结

现象: MAC+WIN10笔记本,音频是好好的,可以听,但是OBS使用的时候,桌面音频条,保持静止,录制的视频,也没有系统声音。 问题排查 1、通常的OBS无法捕获音频解决方法 1)、 驱动问题,更新到最新驱动 2)、声音参数配置问题 3)、右侧小喇叭,音量合成器中, 4)、设…

Midjourney Describe API 的对接和使用

Midjourney Describe API 的对接和使用 Midjourney Describe API 的主要功能是通过上传图片,获取对图片的描述。使用该 API,只需要传递图片文件地址,API 会返回图片的详细描述。无需繁琐的参数设置,即可获得高质量的图片描述。 …

VBA技术资料MF180:将某个文件夹中的某类图片导入Word

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

ssrf实现

一、SSRF (Server-side Request Forge, 服务端请求伪造) 1、概念: 它是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的,所…

SpringBoot项目如何使用和打包本地第三方jar包

有时候我们引用了maven仓库不存在的第三方jar,项目打包后jar包里没有引用的jar,解决方法往下看。 一、目录介绍 SpringBoot项目通过idea打成jar包部署。 将项目打成jar包后,所有引用的jar都存在于BOOT-INF\lib下: 如果存在本地…

HTML静态网页成品作业(HTML+CSS+JS)——迪士尼公主介绍(6个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,使用Javacsript代码,共有6个页面。 二、作品演示 三、代码…

大白话【8】WindowsServer2016搭建DNS服务

1.DNS服务功能介绍 2.DNS服务器搭建 2.0准备环境 2.1把该DNS服务器设置成静态IP 2.2修改主机名(可省略) 2.3安装DNS服务 DNS服务器名为www;IP为192.168.2.100 3.客户机测试 在网内可网络连通的客户机如何验证DNS服务器域名解析有效性&#…

SparkShop开源商城 uploadFile 任意文件上传漏洞复现

0x01 产品简介 SparkShop开源商城(也被称为星火商城)是一款基于ThinkPHP6和Element UI的开源免费可商用的高性能商城系统。适用于各类电商场景,包括但不限于B2C商城、新零售、分销商城等。无论是初创企业还是成熟品牌,都可以通过SparkShop快速搭建个性化独立商城,实现线上…