如何在php-open-source-saver/jwt-auth中移除JWT的exp过期字段
彻底移除JWT令牌中exp字段的实现方法
问题原因
config/jwt.php中被注释的exp配置项属于必填校验声明列表,仅作用于JWT解码校验环节:如果列表中存在某字段,解码时会强制要求token携带该字段,否则抛出校验异常。该配置和JWT生成阶段自动注入哪些字段的逻辑完全独立,因此仅注释exp无法阻止该字段被自动写入生成的token。
具体操作步骤
以Laravel生态最常用的tymon/jwt-auth包为例,按以下配置即可彻底移除exp字段:
- 保留现有必填声明列表的修改,即注释掉
exp项,避免解码时因缺少exp抛出校验异常:'required_claims' => [ 'iss', 'iat', // 'exp', 'nbf', // 'sub', 'jti', ], - 关闭自动生成过期时间的逻辑,两种方式二选一即可:
- 全局生效:直接修改
config/jwt.php中的ttl配置为null,后续所有生成token的逻辑都不会自动注入exp字段:'ttl' => null, - 单次生成生效:如果只需要部分场景生成无exp的token,在构建payload时手动将TTL设为null即可:
// 构建自定义payload时关闭TTL自动计算 $payload = JWTFactory::setTTL(null)->make($yourCustomPayloadData); $token = JWTAuth::encode($payload)->get();
- 全局生效:直接修改
注意事项
- 构建自定义payload数据时,不要主动传入
exp键,否则无论如何配置该字段都会被写入token - 配置完成后可以生成测试token,base64解码payload段确认无exp字段即配置生效
内容的提问来源于stack exchange,提问作者Niraj Shrestha
相关产品推荐
相关产品推荐

