为什么不通过重新发送授权授权/代码而不是发送刷新令牌来获取新的访问令牌?

时间:2017-10-23 15:59:27

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

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

我不明白为什么最初通过发送授权授权获取访问令牌,以及稍后通过发送刷新令牌来区分原因。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

  

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

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