OAuth 2.0 认证的安全问题
参考文章:https://www.yuque.com/pmiaowu/web_security_1/oauth
作者:PHPoop
关于OAuth2.0协议的授权流程可以参考下面的流程图:
1、Client指第三方应用
2、Resource Owner指用户
3、Authorization Server是我们的授权服务器
4、Resource Server是API服务器
认证流程:
整个过程分为 A~F 六个步骤:
A:Client向Resource Owner发出认证请求。
B:Resource Owner对Client的请求给予授权,并给Client颁发一个授权令 牌Authorization Code。
C:Client携带Authorization Code对Authorization Server发起授权请求。
D:Authorization Server对Client的请求给予授权,并给Client颁发一个授权令牌Access Token。
E:Client携带Access Token向Resource Server请求用户信息资源。
F:Resource Server验证Access Token合法后将用户信息资源发回给Client。
自己抓包的过程
用户请求第三方网站接口,说明 要以微博登陆方式进行登陆
GET /api/callback/wb/2 HTTP/1.1 Host: passport.A.com.cn
第三方网站允许以微博方式进行登陆,并且302跳转到微博API服务器 让用户进行授权去获取微博的个人用户数据,在请求的过程中会携带state参数,该参数的值是一个随机数,作用是防止CSRF中间人攻击
HTTP/1.1 302 Moved Temporarily Set-Cookie: connect_state=bced289017a64b36b655c823df191637; Max-Age=600000; Expires=Thu, 23-Apr-2020 03:52:52 GMT; Path=/ Location: https://api.weibo.com/oauth2/authorize?client_id=2529799849&redirect_uri=https://passport.A.com.cn/api/callback/wb/A&response_type=code&state=bced289017a64b36b655c823df191637
client_id用来识别哪个第三方网站需要进行授权,redirect_uri表示验证之后成功/失败后返回的网站,response_type表示要求返回授权码,state验证随机数
GET /oauth2/authorize?client_id=2529799849&redirect_uri=https://passport.A.com.cn/api/callback/wb/A&response_type=code&state=9e17b9931b0f43498e2382362425a51b HTTP/1.1 Host: api.weibo.com
当用户进行验证成功了之后,微博接口会返回一个code作为授权码返回给之前的redirect_uri指向的站点
HTTP/1.1 302 Found Location: https://passport.A.com.cn/api/callback/wb/A?state=9e17b9931b0f43498e2382362425a51b&code=9578dfa3d685f82485f9874c340b2c53
在之后第三方网站要获取用户的个人数据的时候,都会带上这个授权码code来进行请求
GET /api/callback/wb/A?state=9e17b9931b0f43498e2382362425a51b&code=984476766e4539dfeb73aa19fbe8649e HTTP/1.1 Host: passport.A.com.cn
如果自己这样看起来的话 好像code就是token吗?是这样理解的吗?
OAUTH中可能存在的安全问题:
自己总结一下可能有的问题,详细的参考上面的人写的文章
1、当没有进行类似state进行验证的时候,可能会出现CSRF劫持漏洞,又或者可以尝试去发现是否可以跨域资源共享寻找是否可以先得到参数的值,然后就去请求
2、可能会出现的redirect_uri劫持漏洞,同样的是没有对验证的时候回调网址redirect_uri的验证,如果验证了也可以尝试fuzz逃逸,或者只是白名单寻找该父域下的子站点,前提需要类似一个url跳转漏洞!
OAUTH机制参考文章:http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html
一般网站认证的方式都是采用:授权码的方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌,其他三种方式参考OAUTH机制文章!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY