Java基础、中级、高级、架构面试资料

OAuth2中授权码code的其作用是什么?为什么要有code换access_token这个步骤?

JAVA herman 5518浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

很多人在学习 OAuth2 的过程中,都有一些或多或少的疑问,比如我今天标题中的问题,我在阮一峰的博客评论中也看到了不少人的提问。

很多人觉得拿授权码 code 取换取 access_token 是多此一举。其实设计 OAuth2 是一个很精细的活,只有对整个架构,网络安全,http 协议都很精通的人才能更快的驾驭它!

OAuth2 中,拿 code 去换 access_token 一点也不多余。

设计这个步骤是完全出于安全角度考虑的。OAuth2 推荐使用 SSL/TLS 加密的方式进行访问,也就是 HTTPS。但是我们并不能排除所有人都是用 https,所以直接返回 access_token 就显得不太安全。

url 可能会被拦截。另外,HTTP 重定向没有 body,只能通过 url 传参数,而 url 中的参数是不安全的,因为所有经过的路由器或服务器都能读取到 url 的信息,所谓的中间人攻击。

那有人可能又会问,code 就不重要吗?code 如果被截取了呢?

code 再设计时,不需要保密,是因为 code 是一次性的,只要用过一次就失效了,即使中间人拿到 code 也不能获取 access_token,因为还需要 client_id 和 client_secret,而这些信息是在资源服务器保存的。

所以,OAuth2 的设计其实并没有错,细细思考起来,每个步骤都是环环相扣的!没有哪一步是多余的!

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » OAuth2中授权码code的其作用是什么?为什么要有code换access_token这个步骤?