遗忘悠剑

🍀 记录精彩的程序人生 开始使用

Oauth2 原理 ->Access Token & Refresh Token 到底怎么使用?原则是什么?

参考一下定义

下图参考 RFC6749 定义的 Oauth2 中 token 使用的基本流程,看完我们就大概可以明白 Access Token 和 Refresh Token 两个的用法了。

+--------+                                           +---------------+
  |        |--(A)------- Authorization Grant --------->|               |
  |        |                                           |               |
  |        |<-(B)----------- Access Token -------------|               |
  |        |               & Refresh Token             |               |
  |        |                                           |               |
  |        |                            +----------+   |               |
  |        |--(C)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(D)- Protected Resource --| Resource |   | Authorization |
  | Client |                            |  Server  |   |     Server    |
  |        |--(E)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(F)- Invalid Token Error -|          |   |               |
  |        |                            +----------+   |               |
  |        |                                           |               |
  |        |--(G)----------- Refresh Token ----------->|               |
  |        |                                           |               |
  |        |<-(H)----------- Access Token -------------|               |
  +--------+           & Optional Refresh Token        +---------------+

               Figure 2: Refreshing an Expired Access Token

图解 Oauth2

客户端登录逻辑

  • A.客户端带有登录凭证(如:三方微信认证、自家用户名密码等)请求授权服务器
  • B.授权服务器返回 ac_token 和 rf_token

客户端业务逻辑

  • C.客户端带有 ac_token 请求业务服务器(例如用户资料、用户订单等等)
  • D.业务服务器验证 ac_token,且成功,则返回业务数据
  • E.若客户端带有的 ac_token(失效、过期等)请求业务服务器
  • F.业务服务器验证失败,则返回 token error

刷新 Access Token 逻辑

  • G.客户端带上 rf_token 请求授权服务器
  • H.授权服务器真对 rf_token 验证且通过后,返回新的 ac_token 和 rf_token

安全性思考

  • Access Token 越短越安全,但是短了影响用户体验
  • Refresh Token 一定保密不可泄漏,同时最好加入一些特征判定看下一条
  • Refresh Token 刷新必须判定用户的合法性,例如 UA、IP 等资料,也可以是自己与客户端约定的一些特征资料
  • Refresh Token 可以利用用户的 Ua 等特征信息,进行限定登陆设备数量(也就是一个用户同时可以拥有几个 Refresh Token),同时给用户一个观看当前在线设备列表,让用户真实了解在线设备的安全性,选择性让某设备掉线。

🐶 你走,我不送你。你来,风雨无阻,我去接你。

评论
留下你的脚步
推荐阅读