php_jwt 怎么加黑名单呢
-
在使用 PHP JWT(JSON Web Token)时,可以通过以下步骤将某个令牌加入黑名单:
1. 创建一个存储黑名单的数据结构,可以是一个数据库表、缓存或者其他持久化工具。
2. 在验证 JWT 时,添加额外的步骤来检查是否在黑名单中。下面是一个简单的示例:
1. 创建黑名单数据结构:
“`php
// 创建一个黑名单存储的数据结构,假设我们使用 Redis
$redis = new Redis();
$redis->connect(‘127.0.0.1’, 6379);
“`2. 在验证 JWT 时,检查是否在黑名单中:
“`php
use Firebase\JWT\JWT;// 解码 JWT
$jwt = $_GET[‘jwt’]; // 假设 JWT 存在于请求参数中
$key = ‘your_secret_key’; // JWT 签名密钥
$decoded = JWT::decode($jwt, $key, array(‘HS256’));// 验证 JWT 是否在黑名单中
$blacklistKey = ‘blacklist:’ . $decoded->jti; // 假设 jti 是 JWT 的唯一标识符
$isBlacklisted = $redis->exists($blacklistKey);if ($isBlacklisted) {
// JWT 在黑名单中,无效
// 进行相应的处理,如返回错误信息或者拒绝访问
} else {
// JWT 有效,继续处理请求
}
“`3. 将 JWT 加入黑名单:
“`php
// 将 JWT 添加到黑名单中
$blacklistKey = ‘blacklist:’ . $decoded->jti;
$redis->set($blacklistKey, true);
“`以上代码仅提供一个简单示例,实际情况下可能需要根据自己的需求进行调整和扩展。在实际使用中,还需要考虑过期时间、及时清理黑名单等问题。
2年前 -
在 PHP 中使用 jwt 来加入黑名单可以通过以下步骤实现:
1. 创建一个黑名单存储的地方: 在数据库中创建一个表格,用于存储已经加入黑名单的 Token,可以在该表格中存储 Token 的相关信息,比如 Token 的值、过期时间等。
2. 验证 Token 是否在黑名单中: 在验证 JWT 之前,先检查 Token 是否在黑名单中。可以通过查询数据库表格或者使用其他缓存系统来判断 Token 是否被加入黑名单。
3. 将 Token 加入黑名单:当某个 Token 需要被加入黑名单时,将该 Token 的相关信息插入黑名单表格中,包括 Token 的值以及过期时间等。
4. 清除过期的 Token:定期清理黑名单表格中过期的 Token,可以使用定时任务或者其他方式来实现自动清理。
5. 撤销黑名单 Token:如果需要撤销某个 Token 的黑名单状态,可以通过删除黑名单表格中该 Token 的记录来实现。以上是一种简单的实现方式,你可以根据实际需求进行调整和优化。另外需要注意的是,Token 加入黑名单后,即使 Token 的有效期尚未过期,也会被视为无效 Token,因此在验证 Token 时需要先检查其是否在黑名单中。
2年前 -
在使用 JWT(JSON Web Token)时,加入黑名单的目的是为了在某些情况下,例如用户注销或账号被禁用等,使之前签发的 Token 失效,防止继续使用该 Token 访问受保护的资源。
要实现 JWT 的黑名单功能,一般有两种常用的方法:
1. 黑名单存储在数据库中:将失效的 Token 存储到数据库中,每次验证 Token 的时候先查询数据库,判断 Token 是否在黑名单中。
2. 黑名单存储在缓存中:将失效的 Token 存储到缓存中,每次验证 Token 的时候先查询缓存,判断 Token 是否在黑名单中。下面是关于如何实现这两种方法的具体操作流程和代码示例。
## 方法一:黑名单存储在数据库中
### 步骤一:创建数据库表
首先,创建一个用于存储 Token 的数据表。可以创建一个名为 `jwt_blacklist` 的表,包含字段 `token` 和 `expire_time`,分别表示 Token 值和过期时间。
“`sql
CREATE TABLE jwt_blacklist (
token VARCHAR(255) PRIMARY KEY,
expire_time INT
);
“`### 步骤二:Token 验证
在每次验证 Token 的时候,先查询数据库中是否存在该 Token。如果存在且未过期,则合法;如果不存在或已过期,则认为是非法 Token。
“`php
jti);
if ($blacklistToken !== null) {
// Token 存在于黑名单中,认为是非法 Token
return false;
}return true;
} catch (Exception $e) {
// Token 解析失败,认为是非法 Token
return false;
}
}
“`### 步骤三:加入黑名单
当用户注销或账号被禁用时,将相应的 Token 添加到数据库的黑名单表中,设置过期时间为 Token 的过期时间。
“`php
exp;
insertBlackListToken($token, $expireTime);
}
“`## 方法二:黑名单存储在缓存中
### 步骤一:选择缓存存储引擎
选择一个适合的缓存存储引擎,例如 Redis、Memcached 等,并安装相应的依赖库。
### 步骤二:Token 验证
在每次验证 Token 的时候,先查询缓存中是否存在该 Token。如果存在,则认为是非法 Token;如果不存在,则合法。
“`php
jti;
$blacklistToken = $redis->get($key);
if ($blacklistToken !== null) {
// Token 存在于缓存中,认为是非法 Token
return false;
}return true;
} catch (Exception $e) {
// Token 解析失败,认为是非法 Token
return false;
}
}
“`### 步骤三:加入黑名单
将相应的 Token 添加到缓存中,设置过期时间为 Token 的过期时间。
“`php
jti;
$expireTime = $decoded->exp – time();
$redis->set($key, $token, ‘EX’, $expireTime);
}
“`以上就是在使用 PHP JWT 时加入黑名单的方法,根据具体的需求选择适合的方法进行实现。在实际应用中,可以根据业务需求对代码进行进一步优化和封装。
2年前