7个版本 (4个重大更新)
新 0.5.0 | 2024年7月31日 |
---|---|
0.4.2 | 2024年4月24日 |
0.4.1 | 2023年9月29日 |
0.4.0 | 2023年6月14日 |
0.1.0 | 2022年2月2日 |
#153 在 加密学
每月下载量144次
76KB
1.5K SLoC
Biscuit CLI
此包提供了一种命令行界面,允许操作biscuit令牌。
安装
您可以使用Cargo安装biscuit-cli
cargo install biscuit-cli
从源码安装
git clone https://github.com/biscuit-auth/biscuit-cli.git
cd biscuit-cli
cargo install --path .
使用
可执行文件提供上下文帮助,您可以运行biscuit help
来列出可用命令,或运行biscuit help <command>
来获取特定命令的帮助。
所有命令都支持从各种来源读取密钥、数据日志和令牌,例如文件、选项或stdin。
所有命令都可以在脚本中使用,并且可以提供数据日志(generate
、inspect
和attenuate
)的命令也可以以交互方式使用,其中会启动一个文本编辑器($EDITOR
),以便您可以在舒适的环境中输入数据日志程序。
默认情况下,密钥和biscuit以十六进制编码和base64编码的字符串读取和写入,但CLI支持使用专用标志直接使用原始字节。
只需确保您不要在shell历史记录中泄露敏感信息,如私钥
以下是一些常见用例
生成密钥对
$ # this will output the keypair, you can then copy/paste the components
$ biscuit keypair
> Generating a new random keypair
> Private key: d1e3ebc3f522cc2f7bb40c2377830d834c41ebeb0aa54d881a75059704dfa6cb
> Public key: 80c596ea5a6ade1a2f8e7bf96359732d9274789d8e85c0a0a62adbff16f4b289
$ # this will save the private key to a file so you can use it later
$ biscuit keypair --only-private-key > private-key-file
从私钥生成公钥
$ biscuit keypair --from-private-key-file private-key-file --only-public-key
> 2341bc530d8f074100734a41cc05cc82e4e2564eff61b0408f8e37a08f384767
创建biscuit令牌
$ # this will open your text editor and let you type in the authority block as datalog
$ biscuit generate --private-key-file private-key-file
> En0KEwoFZmlsZTEYAiIICgYIBBICGAcSJAgAEiB-So8adTv5YLBK49I8MrK1JdrYLrFSiFqUkRkVsco9MhpAJzlkr2xHM4JSlFmph7c9UEJPqw_BCscMgkIasAjnXZT5BHpA58M1uo_4KUDbPZSJVtbF93P43X41W7aofjZXAiIiCiCScR0e_rBUa7VjxnKW4PT52ZjC3peMCrWOi1T0jgR0fw==
$ # this will generate the token directly
$ echo 'right("file1");' | biscuit generate --private-key-file private-key-file -
$ En0KEwoFZmlsZTEYAiIICgYIBBICGAcSJAgAEiDg91H1_yfDSMrLnfXLowUZsKJDfrC-1XVSPkbikXYy7BpAacFHci_m8X3PffAgeEXVgF3RvwzhE434KWLNpbDYLE1_IOIwsSjRVqFC4fy-NuY9CEqetJ8fHUfo0I7Qs05TDSIiCiDHkAX0s3RgH_wMYDKlE09S2YZM-1cLmFgl5Nh3gvU0bg==
检查biscuit令牌
默认情况下,biscuit
检查仅打印出biscuit内容(数据日志块和吊销ID)。
$ # this will inspect the token stored in the given file
$ biscuit inspect biscuit-file
> Authority block:
> == Datalog ==
> right("file1");
>
> == Revocation id ==
> 526c78ffa3819cb71bcade69d6d78f80ad1209f21d2c3326857c66ca8fc19c63a4283929b690ae40ca8474594631caee464b0367b781d3cc1139343c13900509
>
> ==========
>
> 🙈 Public key check skipped 🔑
> 🙈 Datalog check skipped 🛡️
可以提供公钥以检查biscuit根密钥(如果密钥匹配,则命令将退出并返回成功代码)
$ # this will make sure the biscuit root key is the same as the one that's provided
$ biscuit inspect --public-key-file public-key-file biscuit-file
> Authority block:
> == Datalog ==
> right("file1");
>
> == Revocation id ==
> 526c78ffa3819cb71bcade69d6d78f80ad1209f21d2c3326857c66ca8fc19c63a4283929b690ae40ca8474594631caee464b0367b781d3cc1139343c13900509
>
> ==========
>
> ✅ Public key check succeeded 🔑
> 🙈 Datalog check skipped 🛡️
授权者可以用来检查饼干是否可以在特定环境中使用(只有当密钥匹配且授权成功时,命令才返回成功代码)。
如果您想使用文本编辑器输入授权者,可以使用--authorize-interactive
。
$ biscuit inspect --public-key-file public-key-file \
--authorize-with 'allow if right("file1");' \
biscuit-file
> Authority block:
> == Datalog ==
> right("file1");
>
> == Revocation id ==
> 526c78ffa3819cb71bcade69d6d78f80ad1209f21d2c3326857c66ca8fc19c63a4283929b690ae40ca8474594631caee464b0367b781d3cc1139343c13900509
>
> ==========
>
> ✅ Public key check succeeded 🔑
> ✅ Authorizer check succeeded 🛡️
> Matched allow policy: allow if right("file1")
衰减饼干令牌
# this will create a new biscuit token with the provided block appended
$ biscuit attenuate biscuit-file --block 'check if client_ip_address("127.0.0.1);'
> En0KEwoFZmlsZTEYAiIICgYIBBICGAcSJAgAEiBrhbrvPUXH9RPOzIwnLVyRWwcK64JQ97kBvz1hLJfjfBpAUmx4_6OBnLcbyt5p1tePgK0SCfIdLDMmhXxmyo_BnGOkKDkptpCuQMqEdFlGMcruRksDZ7eB08wROTQ8E5AFCRqhAQo3CgVxdWVyeQoRY2xpZW50X2lwX2FkZHJlc3MKCTEyNy4wLjAuMRgCMg4KDAoCCAgSBggJEgIYChIkCAASIL6EGw7TZQ-8sRa0RT1U0cW8mjN_GzoW0jwX_67I0zPCGkDL5ho8NPsZwskzJ86e31qR29grjcEQormtv7I3YoQy_I2aoZGNtlviX72FuBT85KlVxJtjOiLxCIOvJj4MVN0KIiIKIM6btYoZ-ONE2gKEJ2raR8Bck7SMBAUf2sK7Z8I7uM_D
贡献
git clone https://github.com/biscuit-auth/biscuit-cli.git
cd biscuit-cli
cargo run
cargo test
# CI ensures consistent formatting
cargo fmt --check
# CI ensures that there are no outstanding clippy hints
cargo clippy
集成测试
要在本地运行集成测试,您需要bats
。目前,只支持通过brew
和GitHub Actions进行安装(bats
需要手动加载其模块,其安装路径取决于安装方式)。根据需要,您可以自由添加对更多系统的支持。
bats test.bats
使用brew安装
```sh brew install bats-core brew tap kaos/shell brew install bats-assert brew install bats-file ```依赖项
~13–26MB
~372K SLoC