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 在 调试
94 每月下载量
31KB
481 行
jwtinfo
一个用于获取 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 社区 提供了大量关于如何改进此项目的有用建议。特别感谢:mardiros、matthieum、steveklabnik1、ESBDB、Dushistov、Doddzilla7。还要特别感谢 Rust stackoverflow 社区,特别是 Denys Séguret。
也感谢 Tim McNamara 对此代码库进行了 现场代码审查。
贡献
每个人都非常欢迎为此项目做出贡献。您只需通过 在 GitHub 上提交问题 或提出改进建议即可。
许可
在 MIT 许可证 下许可。© Luciano Mammino & Stefano Abalsamo。
依赖关系
~1.8–2.8MB
~54K SLoC