COMPOSER_AUTH环境变量用于安全注入私有仓库认证凭据,其值为符合auth.json格式的JSON字符串的Base64编码;支持GitHub OAuth、HTTP Basic等多种认证方式,优先级高于本地auth.json,需确保编码无误、域名准确、Token权限最小化。

COMPOSER_AUTH 环境变量用于在不修改 auth.json 文件的前提下,向 Composer 提供私有仓库(如私有 Packagist、GitHub、GitLab 等)所需的认证凭据。它本质上是一个 JSON 字符串的 Base64 编码值,避免明文暴露敏感信息。
配置 COMPOSER_AUTH 的正确格式
该变量的值必须是合法 JSON 内容的 Base64 编码,且 JSON 结构需符合 Composer 的 auth.json 格式。常见结构如下:
- GitHub 个人访问令牌(PAT):
{"github-oauth": {"github.com": "your_token_here"}} - 私有 Packagist(如 Satis 或 Private Packagist):
{"http-basic": {"repo.example.com": {"username": "user", "password": "pass"}}} - 同时配置多种认证:
{"github-oauth": {...}, "http-basic": {...}}
编码前先确认 JSON 合法(无多余逗号、引号闭合),然后用 Base64 编码(注意:不换行、不加空格)。例如在 Linux/macOS 中:
echo -n '{"github-oauth":{"github.com":"ghp_abc123..."}}' | base64 -w0
Windows PowerShell 用户可用:[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('{"github-oauth":...}'))
在不同场景中设置 COMPOSER_AUTH
环境变量可在运行 Composer 命令前临时设置,也可持久化到系统或 CI 配置中:
- 临时使用(当前终端有效):
COMPOSER_AUTH=eyJnaXR... composer install - Bash/Zsh 持久设置(写入
~/.bashrc或~/.zshrc):export COMPOSER_AUTH="eyJ..." - CI/CD(如 GitHub Actions):
env: { COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }},其中 secret 已预先 Base64 编码好 - Docker 构建中:
docker run -e COMPOSER_AUTH="eyJ..." composer install
验证是否生效
设置后可运行 composer config --global --list 查看全局配置(COMPOSER_AUTH 不会显示内容,但影响实际行为);更直接的方式是执行依赖安装并观察是否跳过 401 错误:
- 若私有包能正常下载,说明认证已生效
- 若仍报
Could not fetch https://...: 401 Unauthorized,检查 Base64 是否解码后 JSON 合法、域名拼写是否准确(如github.com不能写成www.github.com)、Token 是否过期或权限不足 - 调试时可临时将变量解码查看:
echo "eyJ..." | base64 -d(Linux/macOS)
注意事项和常见误区
COMPOSER_AUTH 是只读凭证源,它不会写入本地 auth.json,也不会覆盖已存在的 auth.json —— Composer 会按顺序合并:环境变量 > 当前项目 auth.json > 全局 auth.json。
- 不要在代码或公开配置中硬编码 Base64 字符串,应通过安全方式注入(如 CI secrets)
- Base64 编码必须是 UTF-8 原始 JSON,不可含 BOM 或控制字符
- GitHub Token 推荐使用
read:packages、delete:packages等最小必要权限,避免使用admin:org - 如果同时设置了
COMPOSER_HOME,确保其指向位置没有冲突的auth.json
基本上就这些。配置本身不复杂,但容易忽略 Base64 编码和 JSON 结构的细节。










