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加密学

Download history 143/week @ 2024-04-22 9/week @ 2024-04-29 8/week @ 2024-05-20 5/week @ 2024-06-03 1/week @ 2024-06-10 144/week @ 2024-07-29

每月下载量144次

MIT 许可证

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。

所有命令都可以在脚本中使用,并且可以提供数据日志(generateinspectattenuate)的命令也可以以交互方式使用,其中会启动一个文本编辑器($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