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

本贴最后更新于 1148 天前,其中的信息可能已经渤澥桑田

参考一下定义

下图参考 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),同时给用户一个观看当前在线设备列表,让用户真实了解在线设备的安全性,选择性让某设备掉线。
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 6 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 18 关注
  • RefreshToken
    1 引用 • 5 回帖
  • accessToken
    2 引用 • 6 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • ieras
    作者

    @88250 老大,为啥自建的 pipe 发博文时,底下勾选同步到社区不生效了啊!必须在文章列表那的编辑按钮下拉里面的同步方可生效,是我自己搭建的博客有什么地方没弄好吗?

    1 回复
  • 88250

    暂时没有时间排查,Pipe 是开源的欢迎帮忙 debug,谢谢。

    1 回复
  • ieras
    作者

    好的呢,我观察日志来说,发现的不同如下

    • 发布文章底下的发布按钮,没有发现同步的 log
    • 列表编辑按钮的下拉里同步到社区,列出了同步成功的 log

    可能是发表文章底部的按钮那里没能正常触发同步 api 吧

    1 回复
  • 88250

    我记得 Pipe 里面的同步是定时的,30s 一次轮询。

    1 回复
  • ieras
    作者

    好的,谢谢老大 我也再观察看看