私有托管包和仓库的认证#

您的 私有包服务器 或版本控制系统可能使用一个或多个身份验证选项进行保护。为了允许您的项目访问这些包和仓库,您需要告诉 Composer 如何对托管它们的服务器进行身份验证。

身份验证原则#

每当 Composer 遇到一个受保护的 Composer 仓库时,它会首先尝试使用已定义的凭据进行身份验证。当没有任何凭据适用时,它将提示输入凭据并保存它们(如果 Composer 能够检索到令牌,则保存令牌)。

类型 由 Prompt 生成?
http-basic
内联 http-basic
HTTP Bearer
自定义头
gitlab-oauth
gitlab-token
github-oauth
bitbucket-oauth

有时自动身份验证不可行,或者您可能希望预定义身份验证凭据。

凭据可以存储在 4 个不同的位置:项目中的 auth.json、全局 auth.jsoncomposer.json 本身或 COMPOSER_AUTH 环境变量中。

每个项目的 auth.json 中的身份验证#

在此身份验证存储方法中,auth.json 文件将与项目的 composer.json 文件位于同一文件夹中。您可以使用命令行创建和编辑此文件,也可以手动编辑或创建它。

注意:确保 auth.json 文件在 .gitignore,以避免将凭据泄露到您的 git 历史记录中。

全局身份验证凭据#

如果您不想为每个项目提供凭据,则全局存储您的凭据可能是一个更好的主意。这些凭据存储在 Composer 主目录中的全局 auth.json 中。

命令行全局凭据编辑#

对于所有身份验证方法,都可以使用命令行对其进行编辑;

手动编辑全局身份验证凭据#

注意:不建议手动编辑您的身份验证选项,因为这可能导致无效的 json。相反,最好使用 命令行

要手动编辑它,请运行

php composer.phar config --global --editor [--auth]

对于特定身份验证实现,请参阅其部分;

手动编辑此文件而不是使用命令行可能会导致无效的 json 错误。要解决此问题,您需要在编辑器中打开文件并修复错误。要查找全局 auth.json 的位置,请执行

php composer.phar config --global home

如果该文件夹存在,它将包含您的全局 auth.json

您可以在您喜欢的编辑器中打开此文件并修复错误。

composer.json 文件本身中的身份验证#

注意:不建议这样做,因为这些凭据对任何可以访问 composer.json 的人都是可见的,无论是通过像 git 这样的版本控制系统共享它,还是攻击者获得对您生产服务器文件的(读)访问权。

也可以在每个项目的 composer.json 中的 config 部分或直接在仓库定义中添加凭据。

使用 COMPOSER_AUTH 环境变量进行身份验证#

注意:使用命令行环境变量方法也存在安全隐患。这些凭据很可能存储在内存中,并且在关闭会话时可能会持久化到文件(如 ~/.bash_history(linux)或 ConsoleHost_history.txt(Windows 上的 PowerShell))。

为 Composer 提供凭据的最终选项是使用 COMPOSER_AUTH 环境变量。这些变量可以作为命令行变量传递,也可以设置为实际的环境变量。阅读更多关于此环境变量的用法 此处

身份验证方法#

http-basic#

命令行 http-basic#

php composer.phar config [--global] http-basic.repo.example.org username password

在上面的命令中,配置键 http-basic.repo.example.org 包含两部分

  • http-basic 是身份验证方法。
  • repo.example.org 是仓库主机名,您应该将其替换为仓库的主机名。

手动 http-basic#

php composer.phar config [--global] --editor --auth
{
    "http-basic": {
        "example.org": {
            "username": "username",
            "password": "password"
        }
    }
}

内联 http-basic#

对于内联 http-basic 身份验证方法,凭据不会存储在项目中或全局的单独 auth.json 中,而是存储在 composer.json 或全局配置中,与 Composer 仓库定义所在的位置相同。

确保用户名和密码是根据 RFC 3986(2.1. 百分比编码)进行编码的。例如,如果用户名是电子邮件地址,则需要将其作为 name%40example.com 传递。

命令行内联 http-basic#

php composer.phar config [--global] repositories composer.unique-name https://username:[email protected]

手动内联 http-basic#

php composer.phar config [--global] --editor
{
    "repositories": [
        {
            "type": "composer",
            "url": "https://username:[email protected]"
        }
    ]
}

HTTP Bearer#

命令行 HTTP Bearer 身份验证#

php composer.phar config [--global] bearer.repo.example.org token

在上面的命令中,配置键 bearer.repo.example.org 包含两部分

  • bearer 是身份验证方法。
  • repo.example.org 是仓库主机名,您应该将其替换为仓库的主机名。

手动 HTTP Bearer 身份验证#

php composer.phar config [--global] --editor --auth
{
    "bearer": {
        "example.org": "TOKEN"
    }
}

自定义令牌身份验证#

手动自定义令牌身份验证#

php composer.phar config [--global] --editor
{
    "repositories": [
        {
            "type": "composer",
            "url": "https://example.org",
            "options":  {
                "http": {
                    "header": [
                        "API-TOKEN: YOUR-API-TOKEN"
                    ]
                }
            }
        }
    ]
}

gitlab-oauth#

注意:为了使 gitlab 身份验证在私有 gitlab 实例上正常工作,gitlab-domains 部分也应包含 URL。

命令行 gitlab-oauth#

php composer.phar config [--global] gitlab-oauth.gitlab.example.org token

在上面的命令中,配置键 gitlab-oauth.gitlab.example.org 包含两部分

  • gitlab-oauth 是身份验证方法。
  • gitlab.example.org 是 GitLab 实例的主机名,您应该将其替换为您的 GitLab 实例的主机名,或者如果您没有自托管的 GitLab 实例,则使用 gitlab.com

手动 gitlab-oauth#

php composer.phar config [--global] --editor --auth
{
    "gitlab-oauth": {
        "example.org": "token"
    }
}

gitlab-token#

注意:为了使 gitlab 身份验证在私有 gitlab 实例上正常工作,gitlab-domains 部分也应包含 URL。

要创建新的访问令牌,请转到您的 GitLab 访问令牌部分(或您私有实例上的等效 URL)并创建一个新的令牌。另请参阅 GitLab 访问令牌文档 了解更多信息。

手动创建 gitlab 令牌时,请确保它具有 read_apiapi 范围。

命令行 gitlab-token#

php composer.phar config [--global] gitlab-token.gitlab.example.org token

在上面的命令中,配置键 gitlab-token.gitlab.example.org 包含两部分

  • gitlab-token 是身份验证方法。
  • gitlab.example.org 是 GitLab 实例的主机名,您应该将其替换为您的 GitLab 实例的主机名,或者如果您没有自托管的 GitLab 实例,则使用 gitlab.com

手动 gitlab-token#

php composer.phar config [--global] --editor --auth
{
    "gitlab-token": {
        "example.org": "token"
    }
}

github-oauth#

要创建新的访问令牌,请前往您的 Github 令牌设置部分生成新的令牌

对于公共仓库,当遇到速率限制时,无需特定范围的令牌就足够了(参见 范围文档 中的 (no scope))。此类令牌授予对公共信息的只读访问权限。

对于私有仓库,需要 repo 范围。请注意,该令牌将被授予对所有私有仓库的广泛读写权限,以及更多内容 - 请参阅 范围文档 以获取完整列表。截至撰写本文时(2021 年 11 月),似乎无法为这些令牌进一步限制权限。

阅读更多关于 个人访问令牌 的信息,或订阅 Github 中更具范围的令牌路线图条目

命令行 github-oauth#

php composer.phar config [--global] github-oauth.github.com token

在上面的命令中,配置键 github-oauth.github.com 包含两部分

  • github-oauth 是身份验证方法。
  • github.com 是此令牌适用的主机名。对于 Github,您很可能不需要更改它。

手动 github-oauth#

php composer.phar config [--global] --editor --auth
{
    "github-oauth": {
        "github.com": "token"
    }
}

bitbucket-oauth#

BitBucket 驱动程序使用 OAuth 通过 BitBucket REST API 访问您的私有仓库,您需要创建一个 OAuth 消费者才能使用该驱动程序,请参考 Atlassian 的文档。您需要用一些内容填充回调 URL 以满足 BitBucket 的要求,但该地址不需要指向任何地方,也不被 Composer 使用。

命令行 bitbucket-oauth#

php composer.phar config [--global] bitbucket-oauth.bitbucket.org consumer-key consumer-secret

在上面的命令中,配置键 bitbucket-oauth.bitbucket.org 包含两部分

  • bitbucket-oauth 是身份验证方法。
  • bitbucket.org 是此令牌适用的主机名。除非您有私有实例,否则您不需要更改它。

手动 bitbucket-oauth#

php composer.phar config [--global] --editor --auth
{
    "bitbucket-oauth": {
        "bitbucket.org": {
             "consumer-key": "key",
             "consumer-secret": "secret"
        }
    }
}

发现错字?此文档中的内容有误?分叉并编辑 它!