刷新令牌在Laravel Passport中使用访问令牌被撤销

时间:2017-11-10 05:25:13

标签: laravel authentication access-token laravel-passport refresh-token

我正在使用 laravel / passport password_grant进行身份验证。整个生成access_tokenrefresh_token进程正常运行。现在我正在尝试使用laravel passport令牌事件来撤销旧令牌。

我在这篇文章中提到了这个过程 - https://laracasts.com/discuss/channels/laravel/laravel-passport-revoke-and-prune-event-listener-is-not-doing-anything

此作品有效......但使用之前提供的access token刷新refresh token时,系统会创建新的access token并创建新的refresh token。最后,在撤消旧的access token时,旧的,未过期的refresh token也会被撤销。

但我认为,refresh token只有在过期后才能撤销。

此外,当我从EventListeners App\Providers\EventServiceProvider 数组中删除$listen时,撤消机制仍然有效。

就像拔出插头一样,灯泡仍然亮着。

如何解决这个问题?或者我在某个地方错了这个概念?

1 个答案:

答案 0 :(得分:4)

  

但是,当使用先前提供的刷新令牌刷新访问令牌时,正在创建新的访问令牌,并且还会创建新的刷新令牌。

这基本上是使刷新令牌阻止MITM攻击(在某种程度上)的原因。如果有人拦截您的通信并找到您的访问令牌,他们可以冒充长存。但是,如果他们拦截您刷新令牌的请求,则只有您(用户和攻击者)可以使用它,因为它一旦被使用就会被撤销。如果你先使用它,对它们就没用了。如果他们首先使用它,您将被注销,因为您的旧令牌将被撤销。如果他们可以拦截您的所有请求 - 并继续查找新的访问令牌,则需要重新考虑您的安全设置。

来自下的RFC6749部分1.5. Refresh Token图2:刷新过期的访问令牌

  

(H)授权服务器对客户端进行身份验证并进行验证           刷新令牌,如果有效,则发出新的访问令牌(和,           可选地,新的刷新令牌。)