oauth2.0 授权码模式问题
1、oauth2.0 协议 授权码模式中,为什么需要引入授权码code?
如果没有code,在用户授权完成后,授权服务携带access_token调用三方服务的后端接口,将access_token 交给第三方服务的后端,不能通过重定向的方式进行(access_token 不能暴露在浏览器中,避免泄漏)。
这样的话,用户点击完授权后,不能跳转回第三方软件,一直在授权页面 体验不好,当然 第三方服务拿到token后,可以自己重定向回自己的页面。
相对来说比较麻烦。
2、为什么access_token失效后,要使用refesh_token获取access_token,而不是直接获取access_token?
因为access_token的获取需要code + 用户的授权操作,每一次获取都需要一次授权 影响用户体验。
3、没有server的移动端如何使用授权码模式
传统的授权码模式,第三方应用服务端通过code获取到access_token,但是有的移动端应用并没有服务端,如果把app_secret保存到客户端,一旦泄漏,问题很大,因此为了解决这个问题,引入了以下这种方案:
首先,客户端使用一个散列算法生成根据一个随机数生成另一个数,然后在获取code的时候,将生成的数字和散列算法都发到授权服务,因为散列是不可逆的,即使被拦截,也无法推出原来的数字是什么,授权服务保存数字和散列算法,这样待下次通过code换取token的时候,将原来的数字发过去,服务端通过散列算法进行校验,判断是否一致。
如果获取code的过程中,算法和数字被拦截,然后被替换,那么真实的客户端,再次获取token会获取失败,token不会泄漏