最近我遇到了很多JSON网络令牌(JWTs),我经常想用一种快速的方法来查看其中编码了哪些信息。一个简单的解决方案是访问jwt.io,它有一个交互式JWT解码器。然而,由于一些原因,我并不喜欢这种解决方案。
- 其中一些JWTs包含敏感信息。我不想把它们粘贴到一个可能被泄露(意外或其他)的网站。
- 访问一个网页,向下滚动,然后粘贴到一个文本框中,这可能很麻烦,尤其是我倾向于非常注重命令行。
简而言之,我想要一个简单的方法,从命令行中对JWT进行本地解码。我一直都是jq的粉丝,我想它可以做到这一点。我一般不关心签名的验证问题。我只想看到内容。
经过一些搜索和阅读文档,我写了一个简单的函数,并添加到我的~/.zshrc :
jwt-decode() {
jq -R 'split(".") |.[0:2] | map(@base64d) | map(fromjson)' <<< $1
}
我像这样使用它:
% jwt-decode eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
[ { "alg": "HS256", "typ": "JWT" }, { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }]
唯一的依赖是jq ,它很容易安装(例如Mac上的brew install jq )。这个命令在. ,对每一块进行base64解码,把它们解析成JSON,然后打印出来。