注册表身份验证
Cargo 使用凭证提供程序向注册表进行身份验证。这些凭证提供程序是外部可执行文件或内置提供程序,Cargo 使用它们来存储和检索凭证。
使用带身份验证的替代注册表需要配置凭证提供程序,以避免在磁盘上不知不觉地存储未加密的凭证。出于历史原因,公共(未经验证的)注册表不需要凭证提供程序配置,如果没有配置提供程序,则使用 cargo:token
提供程序。
Cargo 还包括特定于平台的提供程序,这些提供程序使用操作系统安全地存储令牌。还包括 cargo:token
提供程序,该提供程序将凭证以未加密的纯文本形式存储在凭证文件中。
推荐配置
建议在 $CARGO_HOME/config.toml
中配置全局凭证提供程序列表,默认情况下为
- Windows:
%USERPROFILE%\.cargo\config.toml
- Unix:
~/.cargo/config.toml
此推荐配置使用操作系统提供程序,并回退到 cargo:token
以查找 Cargo 的凭证文件或环境变量
# ~/.cargo/config.toml
[registry]
global-credential-providers = ["cargo:token", "cargo:libsecret", "cargo:macos-keychain", "cargo:wincred"]
请注意,后面的条目具有更高的优先级。有关更多详细信息,请参阅 registry.global-credential-providers
。
一些私有注册表可能还会推荐特定于注册表的凭证提供程序。请查看您的注册表文档,以确定是否是这种情况。
内置提供程序
Cargo 包含几个内置凭证提供程序。可用的内置提供程序可能会在未来的 Cargo 版本中更改(尽管目前没有这样做的计划)。
cargo:token
使用 Cargo 的凭证文件以未加密的纯文本形式存储令牌。在检索令牌时,检查 CARGO_REGISTRIES_<NAME>_TOKEN
环境变量。如果未列出此凭证提供程序,则 *_TOKEN
环境变量将不起作用。
cargo:wincred
使用 Windows 凭据管理器存储令牌。
凭据在凭据管理器中以 cargo-registry:<index-url>
的形式存储在“Windows 凭据”下。
cargo:macos-keychain
使用 macOS 钥匙串存储令牌。
可以使用钥匙串访问应用程序查看存储的令牌。
cargo:libsecret
使用 libsecret 存储令牌。
任何支持 libsecret 的密码管理器都可以用来查看存储的令牌。以下是一些示例(非详尽列表):
- GNOME 钥匙环
- KDE Wallet Manager(自 KDE Frameworks 5.97.0 起)
- KeePassXC (自 2.5.0 起)
cargo:token-from-stdout <command> <args>
启动一个子进程,该进程在 stdout 上返回令牌。换行符将被修剪。
- 该进程继承用户的 stdin 和 stderr。
- 它应该在成功时退出 0,在错误时退出非零值。
cargo login
和cargo logout
不受支持,如果使用,则会返回错误。
以下环境变量将提供给执行的命令
CARGO
— 执行命令的cargo
二进制文件的路径。CARGO_REGISTRY_INDEX_URL
— 注册表索引的 URL。CARGO_REGISTRY_NAME_OPT
— 注册表的可选名称。不应该用作查找键。
参数将传递给子命令。
凭证插件
对于遵循 Cargo 的 凭证提供程序协议的凭证提供程序插件,配置值应为包含可执行文件路径的字符串(如果路径在 PATH
中,则为可执行文件名)。
例如,要从 crates.io 安装 cargo-credential-1password,请执行以下操作
使用 cargo install cargo-credential-1password
安装提供程序
在配置中,添加到(或创建) registry.global-credential-providers
[registry]
global-credential-providers = ["cargo:token", "cargo-credential-1password --account my.1password.com"]
global-credential-providers
中的值在空格处拆分为路径和命令行参数。要定义路径或参数包含空格的全局凭证提供程序,请使用 [credential-alias]
表。