注册表身份验证

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 logincargo 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]