php_jwt 怎么加黑名单呢

worktile 其他 241

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在使用 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年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    在 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年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在使用 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年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部