#jwt #json #token #web #command-line-tool #json-format

bin+lib jwtinfo

命令行工具,用于获取 JWT(Json Web Tokens)信息

20 个版本

0.4.3 2023 年 11 月 7 日
0.4.2 2023 年 10 月 26 日
0.4.0 2023 年 7 月 11 日
0.3.0 2020 年 10 月 13 日
0.1.7 2020 年 3 月 14 日

#105调试

Download history 33/week @ 2024-07-01 94/week @ 2024-07-29

94 每月下载量

MIT 许可证

31KB
481

jwtinfo

build badge codecov crates.io badge Documentation rustc badge Clippy Linting Result License: MIT OR Apache-2.0 Gitpod Ready-to-Code

一个用于获取 JWT(Json Web Tokens)信息的命令行工具。

用法

jwtinfo 是一个命令行界面,允许你检查给定的 JWT。该工具当前允许以 JSON 格式查看令牌的体。它接受单个命令行参数,该参数应是一个有效的 JWT。

以下是一个示例

jwtinfo eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

将打印

{"sub":"1234567890","name":"John Doe","iat":1516239022}

如果你想可视化令牌头(而不是体),可以通过传递 --header 标志来实现

jwtinfo --header eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

将打印

{"alg":"HS256","typ":"JWT"}

你可以将此工具与其他命令行工具结合使用,例如 jq

jwtinfo eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c | jq .

安装

你可以通过多种方式安装二进制文件

Cargo

你可以使用 cargo 在你的系统中安装二进制文件

cargo install jwtinfo

此时 jwtinfo 将作为系统中的二进制文件可用。

安装脚本

以下脚本将从最新的 GitHub 发布版下载并安装预编译的二进制文件

curl https://raw.githubusercontent.com/lmammino/jwtinfo/main/install.sh | sh

默认情况下,它将二进制文件安装到 /usr/local/bin。你可以在运行脚本之前设置 INSTALL_DIRECTORY 环境变量来自定义此设置(例如,INSTALL_DIRECTORY=$HOME 将二进制文件安装到 $HOME/bin)。

如果您想安装特定版本,可以在运行脚本之前设置环境变量 RELEASE_TAG 指向您的目标版本(例如:RELESE_TAG=v0.1.7)。

预编译的二进制文件

适用于 x64(Windows、MacOs 和 Unix)以及 ARMv7 的预编译二进制文件可在 发布页面 获取。

替代方案

如果您不想为 JWT 调试安装二进制文件,有一个名为 jwtinfo.sh 的超级简单的 bash 替代方案可用。

程序化使用

使用 cargo 安装

[dependencies]
jwtinfo = "*"

然后在您的代码中使用它

use jwtinfo::{jwt};
let token_str = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
let token = jwt::parse(token_str).unwrap();
assert_eq!(token.header.to_string(), "{\"alg\":\"HS256\",\"typ\":\"JWT\"}");
assert_eq!(token.body.to_string(), "{\"iat\":1516239022,\"name\":\"John Doe\",\"sub\":\"1234567890\"}");

由于 jwt:Token 实现了 str::FromStr,您还可以执行以下操作

use jwtinfo::{jwt};
let token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c".parse::<jwt::Token>().unwrap();
assert_eq!(token.header.to_string(), "{\"alg\":\"HS256\",\"typ\":\"JWT\"}");
assert_eq!(token.body.to_string(), "{\"iat\":1516239022,\"name\":\"John Doe\",\"sub\":\"1234567890\"}");

覆盖率报告

如果您想在本地运行覆盖率报告,可以遵循以下配方。

首先,您需要 Rust Nightly,您可以使用 rustup 获取。

rustup install nightly

您还需要 grcov,您可以使用 cargo 获取。

cargo install grcov

现在您可以在配置模式下运行测试

export CARGO_INCREMENTAL=0
export RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Zno-landing-pads"
cargo +nightly test

这将运行您的测试,并在 ./target/debug/ 中生成覆盖率信息。

现在我们可以运行 grcov

grcov ./target/debug/ -s . -t html --llvm --branch --ignore-not-existing -o ./target/debug/coverage/

最后,您将在 ./target/debug/coverage/index.html 中找到可浏览的覆盖率报告。

Tarpaulin 覆盖率

由于 grcov 有时可能不够准确,您还可以通过使用 docker 运行 tarpaulin 来获取覆盖率报告

docker run --security-opt seccomp=unconfined -v "${PWD}:/volume" xd009642/tarpaulin:develop-nightly bash -c 'cargo build && cargo tarpaulin -o Html'

您的覆盖率报告将作为 tarpaulin-report.html 在项目根目录下可用。

致谢

特别感谢 Rust Reddit 社区 提供了大量关于如何改进此项目的有用建议。特别感谢:mardirosmatthieumsteveklabnik1ESBDBDushistovDoddzilla7。还要特别感谢 Rust stackoverflow 社区,特别是 Denys Séguret

也感谢 Tim McNamara 对此代码库进行了 现场代码审查

贡献

每个人都非常欢迎为此项目做出贡献。您只需通过 在 GitHub 上提交问题 或提出改进建议即可。

许可

MIT 许可证 下许可。© Luciano Mammino & Stefano Abalsamo。

依赖关系

~1.8–2.8MB
~54K SLoC