composer如何设置http-basic认证_composer私有源登录配置【凭证】

2次阅读

直接在项目根目录或全局执行 composer config http-basic 命令才能生效,域名须精确匹配仓库 host,auth.json 权限应设为 600,且 json 结构必须为 {“http-basic”: {“host”: {“username”: “”, “password”: “”}}}。

composer如何设置http-basic认证_composer私有源登录配置【凭证】

composer config http-basic 怎么写才生效

直接在项目根目录或全局配置里执行 composer config 命令,才能把凭证写进 auth.json。不手动触发,Composer 不会自动生成或更新认证信息。

  • 项目级配置(推荐):运行 composer config http-basic.repo.example.com username password,会在当前项目生成 auth.json,只对本项目生效
  • 全局配置:加 --global 参数,凭证存到用户家目录的 ~/.composer/auth.json,所有项目都读它
  • 域名必须精确匹配仓库地址的 host 部分,比如私有源是 https://packages.myorg.com,就得填 packages.myorg.com,填 myorg.com 或带 https:// 都无效
  • 如果仓库用了子路径(如 https://repo.example.com/api/v1),依然只认 host,和路径无关

auth.json 文件手写时的格式陷阱

手写 auth.json 最容易错在 JSON 结构和字段名——Composer 只认 http-basic 这个 key,且 value 必须是对象,不能是数组或字符串

  • 正确结构:
    {"http-basic": {"repo.example.com": {"username": "u", "password": "p"}}
  • 常见错误:多了一层 repositories 包裹、用 Token 当作 password 却没关掉 token 认证逻辑、密码含特殊字符没转义导致 JSON 解析失败
  • 文件权限很重要:linux/macosauth.json 权限不能是 644 以上,否则 Composer 会静默忽略它,建议设为 600
  • windows 用户注意:换行符用 LF(unix 风格),CRLF 可能导致解析失败,尤其用记事本保存时

私有源走 HTTPS 但证书不被信任怎么办

HTTP Basic 认证本身不解决证书问题;如果私有源用了自签名证书,Composer 默认拒绝连接,这时要额外配置跳过验证或指定 CA 路径。

  • 临时跳过(仅开发):设置环境变量 COMPOSER_DISABLE_TLS=1,或运行时加 --no-secure-http 参数
  • 生产环境应配 CA:用 composer config cafile /path/to/cacert.pem 指向你的根证书文件
  • 不要混用:http-basiccafile 是独立配置项,缺一不可——有认证没证书信任,连不上;有证书信任没认证,返回 401
  • 某些企业网络中间有代理 TLS 解密,此时实际需要的是代理提供的 CA,不是目标服务器的证书

为什么 composer install 还是提示 authentication required

不是配置没写,而是 Composer 在请求时根本没把凭证发出去,通常卡在几个具体环节。

  • 检查仓库 URL 协议:必须是 https://http://,如果 composer.json 里写的是 git@ssh:// 地址,HTTP Basic 完全不生效
  • 确认源是否真走 HTTP:有些私有源(如 Nexus、Artifactory)默认开启匿名访问,只有特定路径(如 /api/composer/...)才需要认证,看 Composer 实际请求的 URL 日志就能定位
  • 运行 composer install -v,观察输出里有没有 Reading .../packages.json from cache —— 如果命中了本地缓存,就不会触发认证,清缓存再试:composer clear-cache
  • gitlab 私有源要注意:它用的是 composer auth 命令配合 Personal access Token,不是传统用户名密码,得填 token 到 password 字段,并确保 token 有 read_api 权限

最常被忽略的是域名匹配精度和文件权限,这两个点不排查完,其他操作都是白忙。

text=ZqhQzanResources