使用Trusted Publishing时Poetry无法发布包到Jfrog PyPi制品库
解决Jfrog PyPi仓库发布时
Wrong username was used 401错误 问题核心
你遇到的问题本质是Jfrog PyPi仓库的认证逻辑和标准PyPI的token规范不兼容:通过OIDC获取的Access Token是和特定用户绑定的,但Poetry的pypi-token认证方式默认不会携带用户名信息,导致Jfrog服务器无法识别token对应的权限用户,从而抛出用户名错误的401提示。
可行解决方案
1. 适配Jfrog逻辑调整pypi-token配置
虽然pypi-token设计为仅用token,但针对Jfrog的场景,可以在配置中补充关联用户名,让服务器能匹配到对应的权限:
[tools.poetry.repositories.example] url = "https://your-jfrog-instance.com/api/pypi/your-pypi-repo" [tools.poetry.auth] pypi-token.example = { username = "your-oidc-linked-user", token = "your-access-token" }
2. 检查Jfrog仓库的认证规则
登录Jfrog控制台进入目标PyPi仓库设置:
- 确认Trusted Publishing的OIDC集成已正确绑定有权限推送的用户;
- 查看仓库的
Authentication配置,是否开启了强制要求用户名关联token的选项,若开启则必须在认证时携带用户名。
3. 排查Poetry的认证请求细节
执行poetry publish -vvv查看详细日志,确认请求头的认证格式:
- 如果Poetry发送的是
Authorization: Bearer <token>,而Jfrog期望的是Authorization: Basic <base64(username:token)>,说明pypi-token方式无法适配,可改用环境变量注入http-basic的认证信息,避免硬编码:export POETRY_HTTP_BASIC_EXAMPLE_USERNAME="your-oidc-linked-user" export POETRY_HTTP_BASIC_EXAMPLE_PASSWORD="your-access-token" poetry publish --repository example
内容的提问来源于stack exchange,提问作者JohnyX
相关产品推荐
相关产品推荐

