【问题标题】:why not obtain a new access token by resending the authorization grant/code instead of sending refresh token?为什么不通过重新发送授权授权/代码而不是发送刷新令牌来获取新的访问令牌?
【发布时间】:2018-04-04 06:08:04
【问题描述】:

我知道访问令牌是短暂的,因为它们是在不访问数据库的情况下进行验证的,而刷新令牌是长期存在的,并且是针对数据库进行验证的。

我不明白为什么最初通过发送授权授予获取访问令牌和后来通过发送刷新令牌之间存在差异。

RFC 6749看这张图,为什么客户端不简单地在步骤(G)中重新发送授权授予?为什么需要刷新令牌?

  +--------+                                           +---------------+
  |        |--(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        +---------------+

【问题讨论】:

  • tools.ietf.org/html/rfc6749#section-4.1.2 表示授权码不能多次使用。
  • @FlorentMorselli 所以在刷新令牌过期后,客户端必须获得新的授权授权?
  • 是的。如果刷新令牌不再有效(过期、撤销...),那么您必须遵循整个流程。

标签: oauth-2.0 access-token refresh-token


【解决方案1】:

我认为刷新令牌比初始代码更安全是有原因的。

  • 代码从身份验证服务器传输到资源所有者的浏览器,然后传输到客户端。刷新令牌不通过浏览器。因此,代码更容易受到攻击,并且应该是短暂的,只能用于一次使用。
  • OAuth 2 specification 不需要(只是推荐)客户端重定向端点的安全传输层:

这个规范确实 不强制使用 TLS,因为在撰写本文时, 要求客户端部署 TLS 对许多人来说是一个重大障碍 客户端开发者。

token endpoint 需要 TLS,用于获取刷新令牌:

由于对令牌端点的请求导致传输 明文凭据(在 HTTP 请求和响应中), 授权服务器必须要求使用 TLS

这使得初始代码不安全,应尽快或检测到多次使用时使其失效。要获取令牌,您仍然需要客户端密钥,但刷新令牌更安全,可以重复使用。

【讨论】:

    猜你喜欢
    • 2020-03-06
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2016-10-13
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多