如何使 JWT 令牌 PHP 无效

Posted

技术标签:

【中文标题】如何使 JWT 令牌 PHP 无效【英文标题】:How to invalidate a JWT token PHP 【发布时间】:2016-12-03 03:41:31 【问题描述】:

我正在尝试使JWT 中的令牌无效(或删除),但我无法实现。首先我做了类似Logout issue with Laravel JWT-auth authentication:

JWTAuth::invalidate(JWTAuth::getToken())):

但我收到此错误:

不应静态调用非静态方法 Tymon\JWTAuth\JWT::invalidate(),假设 $this 来自不兼容的上下文

然后我做了这样的事情:

use Illuminate\Http\Request;
use Tymon\JWTAuth\JWTAuth;

class AuthController extends Controller

    protected $jwt;

    public function __construct(JWTAuth $jwt)
    
        $this->jwt = $jwt;
    

    public function invalidateToken(Request $request)
    
        $this->jwt->parseToken()->invalidate();

        return response()->json(array('message' => 'log out'));
    

    ...

但我仍然可以将令牌用于另一个请求,并且无法删除或使其无效。

我做错了什么使令牌无效?

编辑:

我从这里阅读了另一个问题,并在github (this is the library I'm using) 上从 JWT 的回购中发布了帖子,我按照所有示例使令牌无效或删除,但我仍然无法删除或使其无效。

【问题讨论】:

从本质上讲,您不能使令牌无效。您可以在这里选择:***.com/questions/21978658/… @E_p 我正在使用这个库:github.com/tymondesigns/jwt-auth,我没有使用 nodejs 的库 没有区别 JWT 适用于任何服务器端语言。没有使令牌过期的机制 我提供的链接中接受的答案告诉您如何处理它。 @E_p 你说得对,谢谢!! 这是一个关于 JWT 撤销的有趣 POV:dinochiesa.net/?p=1388 【参考方案1】:

如果您的 .env 文件中的 cache_driver 设置为数组以外的内容,则黑名单功能有效。

将其更改为文件对我有用。但是,在我的特殊情况下,我也使用了 Entrust,当 cache_driver 设置为文件或数据库时会导致问题。所以,不得不放弃黑名单/无效功能。

希望这对某人有所帮助。

【讨论】:

【参考方案2】:

我认为它应该是这样的:$this->jwt->setToken($old_token)->invalidate(true);

【讨论】:

【参考方案3】:
JWTAuth::invalidate(old token);

【讨论】:

以上是关于如何使 JWT 令牌 PHP 无效的主要内容,如果未能解决你的问题,请参考以下文章

如何在某人更改密码后使用户的 JWT 令牌无效

使以前的令牌无效并检查用户是不是有 JWT 令牌

AzureAD JWT 令牌受众声明前缀使 JWT 令牌无效

刷新令牌如何比长寿命的 JWT 更安全?

PHP JWT 令牌无效签名

其中 jsonwebtoken 存储在服务器 nodejs 中。用户注销后如何使 JWT 过期