freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

OAuth2.0原理及常见漏洞
Notadmin 2025-01-22 10:14:54 94105
所属地 上海

前言

目前,很多的系统在登录的时候都支持通过第三方账号登录,如通过微信,qq,微博扫描登录。这种一般都是通过OAuth2.0搭建完成的。

有一个问题需要思考:通过第三方应用登录的过程是否存在一些安全问题?

本篇文章就来看看OAuth2.0的登录原理以及可能存在的安全问题。

OAuth2.0登录原理

Oauth2.0具有多种授权许可机制协议:授权码许可机制、客户端凭据机制、资源拥有者凭据机制(密码模式)和隐式许可机制。

在了解授权许可机制协议之前,我们得需要了解在OAuth 2.0 的体系里面有 4 种角色,按照官方的称呼它们分别是资源拥有者、客户端、授权服务和受保护资源。

资源拥有者(可以指拥有资源的用户)

客户端(可以理解为第三方系统/软件)

授权服务(权限校验和授权系统(认证服务中心))

受保护资源(用户在系统上所具有的资源/或者能够访问的资源)

授权码许可机制

授权码许可机制的参与者:资源拥有者、客户端、授权服务、受保护资源

授权码模式这种场景下的授权,第三方软件可以通过拿到资源拥有者授权后的授权码,以及注册时的 client_id 和 client_secret 来换回访问令牌 token 的值。

时序图

1737511235_67905143048199d1429e4.png!small?1737511235573

下面以一个网站来看一下具体流程

1)打开网站,选择使用微信登录页面

1737511247_6790514f4ca8e117c9c3b.png!small?1737511247896

发送了下面的请求

1737511268_6790516427452745f2cb2.png!small?1737511268614

每个参数的含义如下

  • appid:客户端应用程序的唯一标识符的强制参数,此值是在客户端应用程序向OAuth服务注册时生成的。此值唯一,表示来自于那个客户端。

用微信扫描登录时需要再微信开放平台(https://open.weixin.qq.com/)进行注册,注册完成以后可以拿到AppID和AppSecret两个。

1737511283_67905173969fb72733353.png!small?1737511284186

  • redirect_uri:向客户端应用程序发送授权代码时用户浏览器应重定向到的URI,这也被称为"回调URI"或回调端点"。在微信开放平台填写。
  • response_type:确定客户端应用程序期望的响应类型以及它想要启动的流,对于授权代码授予类型,值应为代码
  • scope:用于指定客户端应用程序要访问用户数据的哪个子集,这些可能是由OAuth提供程序设置的自定义作用域,也可能是由OpenIDConnect规范定义的标准化作用域
  • state:用于存储与客户端应用程序上的当前会话绑定的唯一、不可更改的值,OAuth服务应该在响应中返回这个确切的值以及授权代码,通过确保对其/callback端点的请求来自发起OAuth流的同一个人,此参数可作为客户端应用程序的CSRF令牌形式1737511293_6790517dd0da5ab78e85b.png!small?1737511294393

这里面可能存在的问题:

  • 没有state参数,可能造成什么危害
  • redirect_uri是否可以伪造

2)跳转到授权页面,用户手机上扫描二维码

1737511466_6790522ae46b86a3aa793.png!small?1737511467381

3)手机上确认以后,会返回一个授权码(问题:扫描后看是否需要人工确认

1737511484_6790523c58537f74a6027.png!small?1737511484801

返回授权码

1737511491_67905243ab72692dbf846.png!small?1737511492161

4)返回授权码以后,前端携带这个授权码到后端,后端就可以与微信端进行交互获取运行的数据

1737511501_6790524d2ece6edf1bf49.png!small?1737511513913


资源拥有者凭据机制(密码模

可试读前30%内容
¥ 19.9 全文查看
9.9元开通FVIP会员
畅读付费文章
最低0.3元/天
# web安全 # 企业安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 Notadmin 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
漏洞挖掘
Notadmin LV.6
微信公众号:信安路漫漫
  • 86 文章数
  • 153 关注者
微信小程序测试技巧总结
2025-03-13
验证机制常见的问题
2025-03-10
常见生成唯一资源ID的方式
2024-12-23
文章目录