auth.json易失效或被忽略,因composer仅按固定顺序查找(项目根目录→composer_home→系统级),放错位置、json格式错误、域名不一致、权限非600均导致静默失败。

为什么直接写 auth.json 容易失效或被忽略
Composer 不会自动读取任意位置的 auth.json,它只按固定顺序查找:项目根目录 → COMPOSER_HOME(通常是 ~/.composer/ 或 %APPDATA%\Composer\)→ 系统级配置目录。放错位置(比如丢进 vendor/、命名为 auth.json.dist、或放在子目录里)等于没配。
常见错误包括:
• 手动创建文件但 JSON 格式不合法(比如多逗号、单引号、缩进混乱)
• 域名拼写不一致(如配置了 bitbucket.org,但请求的是 api.bitbucket.org)
• 权限设置宽松(Linux/macOS 下未执行 chmod 600 auth.json),导致 Composer 拒绝加载
用 composer config 命令写入比手写更可靠
命令行方式由 Composer 自动校验格式、写入正确路径,并设好文件权限(例如 composer config --auth http-basic.repo.example.com user pass 会在项目级生成合规 auth.json 并设为 600)。
不同认证类型对应不同命令:
• GitHub Token:composer config --global github-oauth.github.com <token></token>
• Bitbucket App Password:composer config --global bitbucket-oauth.bitbucket.org <app-password></app-password>(注意:必须是 bitbucket.org,不能带 https:// 或路径)
• Bearer Token:composer config --auth bearer.api.example.com <token></token>
• 自定义 Header:composer config --auth custom-headers.repo.example.org "X-API-Key: abc123"
哪些认证方式会被 Composer 2.5+ 拒绝或静默跳过
Composer 2.2+ 起逐步淘汰不安全或易混淆的配置入口:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
• http-basic.bitbucket.org 已完全失效,必须用 bitbucket-oauth.bitbucket.org
• 配置 http-basic 时用户名含 @ 符号(如邮箱)未做 URL 编码,会导致解析失败
• github-oauth 写成 github.com 或 www.github.com —— 必须严格为 github.com
• 在项目级执行 composer config github-oauth.github.com(不加 --global),结果写入项目 config.json,但该字段仅全局生效,实际不触发认证
安全边界在哪:环境变量 vs 文件 vs 明文硬编码
凭证存储的安全性排序是:环境变量 > 全局 auth.json > 项目级 auth.json > composer.json 内明文。
CI/CD 场景强烈推荐 COMPOSER_AUTH 环境变量:
• 它接收一个 JSON 字符串,例如:export COMPOSER_AUTH='{"http-basic":{"repo.example.com":{"username":"u","password":"p"}}}'
• 不落地、不残留、不进日志(需 CI 平台支持 secret 注入)
• 避免在容器镜像或部署包中固化凭据
• 注意:该变量优先级高于所有 auth.json,且不校验文件权限,适合临时可信环境
真正容易被忽略的是「域名粒度」——哪怕只差一个子域、协议头或大小写,Composer 就不会把凭据附在请求头里,而错误日志往往只报 401 或 Could not fetch,不会提示“认证未发送”。










