私有git仓库需在auth.json中按类型配置:github用"github-oauth"字段配github.com域名及含repo权限的pat;gitlab用"http-basic"字段配精确匹配的域名(含端口)及含read_repository权限的pat,用户名任意、密码为token。

Composer怎么在 auth.json 里配私有 Git 仓库的 token?
私有 Git 仓库(比如 GitHub/GitLab 私有库)作为 Composer 依赖时,Composer 默认没权限克隆,会报 401 Unauthorized 或 Failed to clone。根本解法是把 token 写进 auth.json,让 Composer 自动带认证头请求。
这个文件必须放在正确位置,且权限要严格(尤其在 CI 环境):
-
auth.json通常放项目根目录(和composer.json同级),或全局配置目录(~/.composer/auth.json/%APPDATA%\Composer\auth.json) - Linux/macOS 下运行
chmod 600 auth.json,否则 Composer 会拒绝读取 - 内容格式必须是合法 JSON,且
http-basic和github-oauth是两个不同字段,别混用
例如 GitHub 私有包,auth.json 应这样写:
{
"github-oauth": {
"github.com": "ghp_abc123def456..."
}
}
GitLab 则走 http-basic(注意域名必须精确匹配,含端口也要写全):
{
"http-basic": {
"gitlab.example.com": {
"username": "gitlab-ci-token",
"password": "GLPAT-xyz789..."
}
}
}
为什么 composer install 时 token 没生效?常见失效原因
token 配了但还是 401,大概率不是 token 本身问题,而是路径、作用域或协议不匹配:
- Composer 优先读项目级
auth.json,如果全局也有,项目级会覆盖——但若项目级存在却权限不对(如 644),Composer 会静默跳过,回退到无认证状态 - GitHub token 必须开启
repo权限(不是read:packages);GitLab PAT 要勾选read_repository - 依赖地址写的是
https://github.com/xxx/yyy.git,但auth.json里配的是api.github.com——错,必须配github.com - 用了 SSH URL(
git@github.com:xxx/yyy.git)却去配 HTTP 认证——无效,SSH 走密钥,跟 token 无关
私有包加了镜像源,auth.json 还需要配吗?
需要,而且必须配在镜像源对应的域名下。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
镜像只是转发请求,不代替认证。比如你用阿里云镜像 https://mirrors.aliyun.com/composer/ 加速 packagist.org,那只是公共包;但私有仓库(如 git.mycompany.com)不会被镜像收录,Composer 仍会直连原地址——所以 auth.json 里仍得写 git.mycompany.com 的凭据。
更隐蔽的情况:有些公司自建 Packagist 镜像(如 Satis 或 Private Packagist),它本身是个 HTTP 服务,访问它也需要 Basic Auth。这时你要配的是镜像服务的域名,不是 Git 服务器的:
{
"http-basic": {
"packagist.mycompany.com": {
"username": "satis",
"password": "secret123"
}
}
}
CI/CD 中怎么安全注入 token?别硬编码
CI 脚本里直接 echo token 到 auth.json 很危险(可能被日志泄露)。推荐方式:
- GitHub Actions:用
composer config --auth http-basic.git.mycompany.com ${{ secrets.GIT_USERNAME }} ${{ secrets.GIT_TOKEN }}动态生成 - GitLab CI:用
before_script把变量写入auth.json,并立即chmod 600 auth.json - Docker 构建:用
--secret挂载,再在构建阶段用cat /run/secrets/composer_auth > auth.json
关键点:所有方式都要确保 auth.json 不进 Git,且构建后清理(尤其多阶段构建中,别把它留在最终镜像里)。
最易忽略的是 token 权限粒度——给一个长期有效的 token 却只用于拉一个私有组件,等于埋了个持久化风险点。能用 deploy token 或 scoped PAT 就别用个人 token。










