composer怎么配置http-basic私有源_composer企业内部包管理【认证】

6次阅读

正确做法是用 composer config 命令将凭证存入 auth.json:全局执行 composer config -g http-basic.repo.example.com username password,或项目级去掉 -g;需确保域名精确匹配、特殊字符 url 编码,并注意权限与 ci 安全实践。

composer怎么配置http-basic私有源_composer企业内部包管理【认证】

composer config http-basic 怎么填账号密码

直接在 composer.json 里硬编码账号密码是错的,既不安全也不可协作。正确做法是用 composer config 命令把凭证存到全局或项目级的 auth.json 里。

执行这行命令(替换为你的私有源域名、用户名和密码):

composer config -g http-basic.repo.example.com username password

它会在用户主目录下生成或更新 auth.json,内容类似:

{     "http-basic": {         "repo.example.com": {             "username": "username",             "password": "password"         }     } }
  • 如果私有源走 https 但用了自签名证书,还得额外加 composer config -g secure-http false(不推荐长期开启)
  • -g 是全局配置;想只对当前项目生效,去掉 -g,会写入项目根目录下的 auth.json
  • 密码里含特殊字符(比如 @/)?先 URL 编码再填,否则 composer 解析会失败

私有源 require 报 401 错误的常见原因

运行 composer installcomposer require 时提示 401 Unauthorized,不是密码错了就是认证没对上源地址。

  • 检查 composer.jsonrepositoriesurlhttp-basic 配置的域名是否完全一致(https://pkg.example.compkg.example.com 不等价)
  • 私有源启用了子路径(如 https://example.com/packagist),但 http-basic 配的是 example.com —— 这不行,必须精确到 host 级,不含 path
  • 公司用了反向代理或 SSO 跳转,实际认证发生在另一个域名(比如 auth.example.com),这时要配的是那个跳转目标域名,不是你看到的仓库 URL
  • gitlab 或 Nexus 搭建的 Composer 源,有时需要开启「Composer API」支持,单纯放 ZIP 包不触发认证流程

auth.json 文件权限和 CI 场景怎么处理

auth.json 默认被 composer 读取,但它一旦落盘就可能泄露凭证。尤其在 CI/CD 流水线里,不能直接提交或硬编码。

  • 本地开发:确保 auth.json.gitignore 里,且文件权限是 600linux/macoschmod 600 ~/.composer/auth.json
  • CI 环境(如 github Actions):用 secrets 注入环境变量,再用脚本动态生成 auth.json,例如:
echo '{"http-basic":{"repo.example.com":{"username":"'$USERNAME'","password":"'$Token'"}}}' > auth.json
  • docker 构建:不要 copy 整个 ~/.composer,而是构建时用 --build-arg 传参,RUN 阶段生成临时 auth.json,最后删掉
  • 团队共用一个私有源但不同人权限不同?别共享 auth.json,每人自己配;服务端靠 token 粒度控制包访问范围

HTTP Basic 认证和 OAuth / Bearer Token 的区别

http-basic 只支持用户名+密码(或 token 当密码用),不等于所有私有源都接受它。有些平台(如 GitHub Packages、GitLab)优先走 BearerOAuth 认证。

  • GitHub Packages 要求用 personal access token 当密码填进 http-basic,但 host 必须是 npm.pkg.github.com(不是 github.com),否则 403
  • GitLab 私有源若启用了 composer_repository 功能,需在 repositoriesurl 后加 /api/v4/groups/xxx/-/composer,且 http-basic 的 host 填 GitLab 实例域名
  • 如果源返回 WWW-Authenticate: Bearerhttp-basic 就无效,得换方式 —— 目前 composer 原生不支持 Bearer,得靠插件(如 satispress/composer-auth-plugin)或改用 artifact 模式离线同步

真正麻烦的从来不是配哪几行命令,而是搞清你对接的那个私有源,底层到底认哪种认证头、哪个域名在起作用、以及它有没有偷偷重定向。多抓一次 curl -v 看响应头,比反复试 config 有用得多。

text=ZqhQzanResources