刷新令牌被 Laravel Passport 中的访问令牌撤销

bes*_*ant 5 authentication access-token laravel refresh-token laravel-passport

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

我参考了这篇文章的过程 - https://laracasts.com/discuss/channels/laravel/laravel-passport-revoke-and-prune-event-listener-is-not-doing-anything

这有效......但是当access token使用先前提供的刷新时refresh tokenaccess token正在创建一个新的并创建一个新的refresh token存在。最终,在撤销 old 时access token, old, not expiredrefresh token也被撤销。

但我认为,refresh token只有在它到期时才必须撤销。

而且当我EventListenersApp\Providers\EventServiceProvider $listen array 中删除时,撤销机制仍然有效。

这就像拔掉插头灯泡仍然亮着一样。

如何解决这个问题?还是我在某个地方的概念有误?

iSW*_*ORD 8

但是,当使用之前提供的刷新令牌刷新访问令牌时,会创建一个新的访问令牌,同时也会创建一个新的刷新令牌。

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

来自 RFC6749 第1.5图 2下的刷新令牌:刷新过期的访问令牌

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