注册表身份验证
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 凭据管理器存储令牌。
凭据在“Windows 凭据”下的凭据管理器中存储为 cargo-registry:<index-url>
。
cargo:macos-keychain
使用 macOS Keychain 存储令牌。
可以使用 Keychain Access 应用程序查看存储的令牌。
cargo:libsecret
使用 libsecret 存储令牌。
任何支持 libsecret 的密码管理器都可以用来查看存储的令牌。 以下是一些示例(并非详尽无遗)
cargo:token-from-stdout <command> <args>
启动一个子进程,该进程在标准输出上返回一个令牌。 将会删除换行符。
- 该进程继承用户的标准输入和标准错误。
- 它应该在成功时退出 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]
表。