credentials.json

警告

此功能是实验性的,可能会有重大变更。 请参阅Conan 稳定性部分获取更多信息。

Conan 可以通过以下方式针对其 Conan 远程服务器进行身份验证

  • 交互式命令行,当某些服务器启动未经授权的错误时,Conan 客户端将交互式地询问用户名/密码并重试。

  • 使用 conan remote login 命令,可以使用参数传递或交互方式完成身份验证。

  • 使用环境变量 CONAN_LOGIN_USERNAME 用于所有远程服务器(CONAN_LOGIN_USERNAME_{REMOTE} 用于单个远程服务器)和 CONAN_PASSWORDCONAN_PASSWORD_{REMOTE} 用于单个远程服务器),Conan 在必要时不会在命令行中进行交互式请求,而是从环境变量中获取值,就像它们是由用户提供的一样。

  • 在 Conan 缓存中放置一个 credentials.json 文件。

  • 使用自定义的 auth plugin

本节介绍 credentials.json 文件的用法。

该文件具有以下格式,其中每个 credentials 条目都应具有一个 remote 名称,该名称与 conan remote list 中定义的名称匹配。 然后是 userpassword 字段。

{
    "credentials": [
        {
            "remote": "default",
            "user": "admin",
            "password": "password"
        }
    ]
}

当服务器需要并请求时,Conan 将能够自动从此文件中提取凭据。

注意

Conan 不会抢先使用凭据来强制在每个 Conan 命令中自动登录每个定义的远程服务器。 默认情况下,Conan 使用先前存储的令牌或匿名使用,直到执行显式的 conan remote login 命令,或者直到远程服务器启动身份验证错误。 发生这种情况时,将针对该服务器进行身份验证,使用 credentials.json 文件、环境变量或用户交互式输入。

凭据来源的优先级如下

  • 如果 credentials.json 文件存在,则它具有更高的优先级,如果存在远程服务器的条目,则将使用它。 如果不起作用,将会出错。

  • 如果 credentials.json 中不存在该远程服务器的条目,它将查找定义的环境变量

  • 如果环境变量不存在,它将交互式地请求凭据。 如果 core:non_interactive=True,将会出错。

credentials.json 文件使用注入的 platformos 导入进行 jinja 渲染,因此允许使用 jinja 语法。 例如,它可以执行以下操作来从环境变量中获取凭据

{% set myuser = os.getenv('myuser') %}
{% set mytk = os.getenv('mytoken') %}
{
    "credentials": [
        {
            "remote": "myremote",
            "user": "{{myuser}}"
            "password": "{{mytk}}"
        }
    ]
}