很多人在学习 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 的设计其实并没有错,细细思考起来,每个步骤都是环环相扣的!没有哪一步是多余的!
: » OAuth2中授权码code的其作用是什么?为什么要有code换access_token这个步骤?
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/tech/java/252222.html