composer config bitbucket-oauth.bitbucket.org 是唯一有效入口,因 composer 2.2+ 已移除旧认证方式,仅识别该精确键名,严格校验域名、值格式并自动写入权限为600的auth.json。

必须用 composer config bitbucket-oauth.bitbucket.org 写入 App Password,其他方式在 Composer 2.2+ 中全部失效。
为什么 composer config bitbucket-oauth.bitbucket.org 是唯一入口
Composer 2.2+ 彻底移除了对 http-basic.bitbucket.org 和旧 OAuth consumer 的支持,只解析这个精确键名。它内部强制做三件事:校验域名是否严格等于 bitbucket.org(不接受 www.bitbucket.org 或带协议前缀)、拒绝非 App Password 格式的值、自动写入 auth.json 并设权限为 600。手写 auth.json 容易因字段嵌套错误、多余空格、权限不对(比如 644)导致 Composer 静默跳过认证——现象就是反复报 Could not fetch https://api.bitbucket.org/2.0/repositories/...。
composer config 命令的两种调用方式与作用域差异
命令行为取决于是否加 --global(或 -g):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer config bitbucket-oauth.bitbucket.org <token></token>:写入当前项目根目录的auth.json(若不存在则创建),仅对该仓库生效 -
composer config --global bitbucket-oauth.bitbucket.org <token></token>:写入用户级~/.composer/auth.json,所有项目共享 - CI 环境(如 GitHub Actions)中,
--global不一定可靠(路径可能不可写),建议改用COMPOSER_AUTH环境变量注入 JSON 字符串
配完还报 401 / 403 的真实原因
不是 token 没生效,而是 Composer 根本没走到认证那步——它只在明确识别到 “这是一个需要认证的 Bitbucket vcs 仓库” 时才读 bitbucket-oauth。常见卡点:
-
composer.json中私有仓库的"type"不是"vcs",比如写成"package"或留空 - 仓库 URL 不以
.git结尾,例如用了https://bitbucket.org/owner/repo(缺后缀) - URL 域名写错,如
www.bitbucket.org或api.bitbucket.org,配置静默无效 - 未运行
composer clear-cache,Composer 复用旧的未授权请求头 - Bitbucket 账号启用了 SSO,但 App Password 在 SSO 启用状态下被禁用(需关闭 SSO 或联系管理员授权)
App Password 必须满足的三个硬性条件
生成位置和权限细节决定成败:
- 必须从你个人账号(非团队/Workspace 账号)进入:
Personal settings → App passwords → Create app password - 权限至少勾选
Repositories: Read;Account: Read可选,但部分旧版 Composer 会校验 - 生成后页面只显示一次明文,关闭即不可恢复——复制时务必全选,注意末尾换行符是否混入
最容易被忽略的是:Bitbucket Server(自建版)完全不支持 bitbucket-oauth,必须走 http-basic + Basic Auth,别混用配置。










