如何将 JSON 中的 JWT 令牌中的声明获取到对象中?

问题描述 投票:0回答:2

我有一个包含 JWT 令牌的 JSON 对象。我想从令牌中提取声明并将其放入 JSON 对象中,替换令牌。这是我的目标:

{
  "id": 7,
  "time": "now",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYm9iYnkiLCJjb2xvciI6ImJsdWUiLCJ0cmVlIjoiZWxtIn0K.9JCVXpkI6ICc5RnIsIiN1IzUIJiOicGbhJye"
}

JWT 包含以下声明(在 JWT 的中间字段中进行 Base64 编码,以点分隔):

{
    "name": "bobby",
    "color": "blue",
    "tree": "elm"
}

如何使用 jq 提取声明并将其放入 JSON 中代替 JWT 令牌?

json jwt jq
2个回答
0
投票

在点处分割,取出第二项,然后使用

@base64d
fromjson
进行解码:

jq '(.token / ".")[1] | @base64d | fromjson'
{
  "name": "bobby",
  "color": "blue",
  "tree": "elm"
}

演示


0
投票

使用

splits
函数将标记拆分为点,使用
@base64d
过滤器对数据进行 Base64 解码,并使用
fromjson
过滤器将字符串转换为 JSON。

|=
更新运算符可用于将结果分配回
.token
字段。

jq '.token |= ([splits("\\.")][1] | @base64d |fromjson)' file.json

结果:

{
  "id": 7,
  "time": "now",
  "token": {
    "name": "bobby",
    "color": "blue",
    "tree": "elm"
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.