Composer 本身不支持双因素认证(2FA),需在 GitHub、GitLab 和 Packagist 等上游平台启用 2FA 并使用个人访问令牌(PAT)配置 auth.json,禁用密码认证,限制令牌权限与有效期,避免泄露。

Composer 本身不直接支持双因素认证(2FA),它依赖包托管平台(如 GitHub、GitLab、Packagist)的认证机制。要保护私有包访问,关键是在源代码仓库和 Packagist 账户上启用 2FA,并配合 Composer 使用带权限的个人访问令牌(PAT),而非密码或 SSH 密钥。
在 Git 托管平台启用 2FA 并生成 PAT
GitHub、GitLab 等平台要求启用 2FA 后才能创建具有私有仓库读取权限的个人访问令牌。该令牌将替代密码用于 Composer 的 auth.json 配置。
- GitHub:进入 Settings → Developer settings → Personal access tokens → Tokens (classic),勾选
repo权限(读取私有仓库必需) - GitLab:Settings → Access Tokens,选择
read_repository范围 - 确保令牌未过期,且仅授予最小必要权限
配置 Composer 的 auth.json 使用令牌
将令牌写入项目根目录或全局 auth.json(推荐项目级,避免泄露),Composer 会在克隆私有仓库时自动使用:
{
"github-oauth": {
"github.com": "ghp_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
"gitlab-token": {
"gitlab.com": "glpat-XXXXXXXXXXXXXXXXXXXX"
}
}
注意:不要提交 auth.json 到版本库;加入 .gitignore,并用环境变量或 CI/CD 秘密注入(如 GitHub Actions 的 secrets.GITHUB_TOKEN)。
在 Packagist 上绑定账户并启用 2FA
如果你通过 Packagist 分发私有包(例如使用 Private Packagist 或自建 Satis),需确保 Packagist 账户已开启 2FA:
- 登录 packagist.org → Account → Two-factor authentication → Enable
- 绑定后,所有 Webhook、API 操作(如手动更新包)均需验证码
- 若使用 Private Packagist 服务,其后台也提供组织级 2FA 策略和 SSO 集成选项
配合 SSH + 代理或 HTTPS 令牌实现更细粒度控制
对于高安全要求场景,可禁用密码认证,强制使用 SSH 密钥(配合硬件密钥如 YubiKey)或 HTTPS + 令牌:
- 在
composer.json中显式指定仓库类型与 URL:"repositories": [{"type": "vcs", "url": "https://oauth2:TOKEN@github.com/user/private-repo"}] - 使用
git config --global url."https://oauth2:@github.com/".insteadOf "https://github.com/"统一重写凭据 - CI 环境中优先使用平台原生 token(如 GitHub Actions 的
GITHUB_TOKEN),无需手动管理
不复杂但容易忽略:2FA 是账户层防护,真正起效依赖你是否停用密码认证、是否轮换令牌、是否限制令牌作用域。Composer 的安全性,本质是上游凭证链的安全性。










