oauth

最近笔者在项目中用到了Oauth2.0相关的技术,之前对Oauth的授权一直出于简单了解的状态,对于Oauth
其中的跳转,也是比较懵逼的状态,不太能理解为什么要一直跳来跳去.后来查阅了许多资料之后,终于能
大概理清楚其中的原因.这边文章附上一张时序图,我会详细解释每个时序图的步骤,以及为什么要这么设计,
如果理解的有什么不对的地方,欢迎大家指正,时序图中的我标明了每一步的顺序.
Oauth2.0时序图

这里我们首先理清楚图中的四个角色,这里我以微信的小程序来举例
- 用户: 这个很好理解,指的就是我们自己.在oauth其实上代指的时候你想要访问的资源的所有者
- app: 就是各个微信小程序
- 用户资源: 其实就是微信服务上存储的我们用户的一些信息,比如我们的微信头像,昵称或者
更加隐私的手机号码
- Auth服务: 就是微信的鉴权的服务

第一步/第二步:
步骤一[时序图上画的1的那一步].对于我们是无感知的,用户一进入小程序的时候,小程序的开发者已经把地址拼接好了,
各位想一想,是不是我们在微信上访问小程序的时候,实际上是先访问各个小程序开发者拼接好的一个固定的URL地址,
这个地址对于一个的小程序来说是固定的,所有人看到的都是一样.有兴趣的小伙伴可以自己去抓包看.
步骤二当小程序的开发者把地址返回给我们的时候,我们只要在页面点击登录/注册/或者任意地方即可,这样
前二步骤就已经完成了.中途对于我们用户来说没有任何感知
第三步:
当我们点击小程序的任意地方[大部分情况是登录],实际上是由用户自己带上小程序的appId表示访问微信的授权服务器
第四步/第五步:
当授权服务器接收到请求之后,会拉起弹窗,告诉用户小程序想访问你的头像/昵称/手机号码等信息,这一步是需要用户授权的
用户同意授权之后,进入第五步
第六步:
微信的授权服务器这时候会生成一个code码,返回给小程序后台.注意!这里的小程序后台指的是开发者的后台,请勿混淆.
至于为什么生成code码,而不是直接返回所以AccessToken这些敏感的操作等信息,因为这是这些信息的交互还是在小程序的页面上的,用户如果通过
抓包等技术手段是可以窃取到所有信息的,所以AccessToken这些敏感的操作,只能放在小程序后台和微信授权服务器之间完成
,毕竟服务器和服务器之间的通讯相对于用户环境还是要安全的
第七步/第八步:
这里小程序的后台会拿到用户返回给他的code+appId+appSecrt等信息去微信的授权服务器换取用户的访问令牌,微信的授权服务器在校验和
确认这些信息合法后会返回该用户的访问令牌给小程序.这是小程序后台一般会存储该访问令牌,
第九步/第十步:
小程序后续会利用该用户的访问令牌去访问用户的信息数据.当访问令牌过期的时候,可能会利用RefreshToken去刷新访问令牌