私有托管包和仓库的认证#
您的 私有包服务器 或版本控制系统可能使用一个或多个身份验证选项进行保护。为了允许您的项目访问这些包和仓库,您需要告诉 Composer 如何对托管它们的服务器进行身份验证。
身份验证原则#
每当 Composer 遇到一个受保护的 Composer 仓库时,它会首先尝试使用已定义的凭据进行身份验证。当没有任何凭据适用时,它将提示输入凭据并保存它们(如果 Composer 能够检索到令牌,则保存令牌)。
类型 | 由 Prompt 生成? |
---|---|
http-basic | 是 |
内联 http-basic | 否 |
HTTP Bearer | 否 |
自定义头 | 否 |
gitlab-oauth | 是 |
gitlab-token | 是 |
github-oauth | 是 |
bitbucket-oauth | 是 |
有时自动身份验证不可行,或者您可能希望预定义身份验证凭据。
凭据可以存储在 4 个不同的位置:项目中的 auth.json
、全局 auth.json
、composer.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_api
或 api
范围。
命令行 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"
}
}
}
发现错字?此文档中的内容有误?分叉并编辑 它!