如何使用Linux命令行JSON解析器jq提取JWT的exp过期时间值?
问题场景
在Debian GNU/Linux 11 (bullseye)环境中使用命令行JSON解析器jq解码JWT格式数据时,原命令会返回JWT头部、载荷的全量键值对,需要修改命令实现仅提取过期时间exp对应的数值。
原执行命令:
jq -R 'split(".") | .[0],.[1] | @base64d | fromjson' <<< eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE2NTUzODQ4MzJ9.QVevY3qVLWHxfkNX1S4bas6PKSN75Nf96V7WmkcgbrE
原命令返回结果:
{ "alg": "HS256", "typ": "JWT" } { "sub": "1234567890", "name": "John Doe", "iat": 1516239022, "exp": 1655384832 }
解决方法
JWT的过期时间字段存储在以.分割的第二段(索引为1)载荷中,不需要解析第一段头部内容,解析完载荷段的JSON后直接提取.exp字段即可。
修改后的命令:
jq -R 'split(".") | .[1] | @base64d | fromjson | .exp' <<< eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE2NTUzODQ4MzJ9.QVevY3qVLWHxfkNX1S4bas6PKSN75Nf96V7WmkcgbrE
命令执行后直接输出目标值:
1655384832
核心改动点:
- 移除原过滤规则中的
.[0],跳过JWT头部段的解析,仅处理载荷段 - 在过滤规则末尾增加
| .exp,直接从解析后的载荷JSON中提取过期时间字段,不再返回全量键值对
内容的提问来源于stack exchange,提问作者vengy
相关产品推荐
相关产品推荐

