Oauth2的授权码模式为什么要用code获取token?而非回跳时直接返回token呢

为什么oauth2中的授权码模式 在获取token之前非要先到资源服务器获取一个code 然后才使用资源服务器的code去资源服务器去申请token?而不能在回跳时直接返回token呢?

首先,从产品交互上,我们需要浏览器跳转到“认证服务器”,让用户明确表态同不同意“第三方站点”的授权请求。这个时候,浏览器访问的地址已经到“认证服务器”去了,不跳转回来的话,网页不在“第三方站点”的控制中,怎么进行授权成功后的下一步交互呢?授权码模式的安全考量,是基于产品交互能完成的前提下,考虑如何不在浏览器这种暴露 url 的环境里做到安全的。如果你想表达的是“认证服务器”跳转回来,但是不带 code,而是通过 Server 对 Server 将 token 直接给“第三方服务器”。这样会造成一系列问题:

  1. Http 协议是无状态的,“第三方服务器”无法从一个 Server 对 Server 的请求轻易区分这个 token 对着自己当前哪个 Session。
  2. 如果依赖第一步里,“第三方服务器”跳转到“认证服务器”时传递的 GET 参数来作为 Session 身份区分,又涉及到跳转本身就是明文,可能被篡改的问题,需要协定复杂的签名协议来保证安全,这和 OAuth2 希望设计简洁验证模式的初衷违背。
  3. 假设安全问题解决了,已跳转回来的“第三方服务器”网页需要等待一个不知道何时才会过来的“认证服务器” Server 回调,才能告诉用户到底授权成功没有。远不如同步主动去请求“认证服务器”获取方便。

code 是通过浏览器重定向获取的,你在浏览器地址栏就可以看到,如果这一步不返回code而是直接返回access token,那么这个token其实已经暴露了, 而client拿到code以后换取access token是client后台对认证服务器的访问,不依赖浏览器,access token不会暴露出去

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值