我正在使用 laravel / passport password_grant
进行身份验证。整个生成access_token
和refresh_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
时,撤消机制仍然有效。
就像拔出插头一样,灯泡仍然亮着。
如何解决这个问题?或者我在某个地方错了这个概念?
答案 0 :(得分:4)
但是,当使用先前提供的刷新令牌刷新访问令牌时,正在创建新的访问令牌,并且还会创建新的刷新令牌。
这基本上是使刷新令牌阻止MITM攻击(在某种程度上)的原因。如果有人拦截您的通信并找到您的访问令牌,他们可以冒充长存。但是,如果他们拦截您刷新令牌的请求,则只有您(用户和攻击者)可以使用它,因为它一旦被使用就会被撤销。如果你先使用它,对它们就没用了。如果他们首先使用它,您将被注销,因为您的旧令牌将被撤销。如果他们可以拦截您的所有请求 - 并继续查找新的访问令牌,则需要重新考虑您的安全设置。
来自下的RFC6749部分1.5. Refresh Token图2:刷新过期的访问令牌:
(H)授权服务器对客户端进行身份验证并进行验证 刷新令牌,如果有效,则发出新的访问令牌(和, 可选地,新的刷新令牌。)