GitHub API返回Bad credentials 管理员权限OAuth令牌调用仍报错
问题排查与解决
你遇到的Bad credentials报错大概率是以下几个原因导致的,按优先级排查即可:
- 首先检查curl命令写法错误:你当前的POST请求把
Authorization和Accept两个请求头写在了同一个-H参数内,两个头之间没有做分隔,GitHub服务端无法正确识别到你的认证信息,会直接返回凭证错误。每个请求头必须单独使用一个-H参数声明。 - 其次检查PAT的配置匹配问题:
- 如果你用的是经典类型PAT,确认已经完整勾选
repo权限范围(包含repo下所有子权限,不要只勾选部分子项),同时确认PAT没有超过有效期、你当前发起请求的出口IP在PAT配置的IP白名单范围内。 - 如果你用的是新版细粒度PAT,除了基础仓库权限外,需要单独做两个配置:一是在PAT的可访问仓库列表中手动添加目标仓库,细粒度PAT默认不会自动包含你通过协作者、团队授权获得权限的仓库;二是在仓库权限配置中找到
Actions项,将权限设置为「读写」,细粒度PAT的权限是拆分配置的,仅开仓库基础访问权限无法调用Actions相关接口。
- 如果你用的是经典类型PAT,确认已经完整勾选
- 你之前调用用户仓库列表接口返回空数组属于正常现象:该接口默认只会返回查询用户作为所有者创建的仓库,不会返回用户作为协作者、通过团队继承权限的仓库,返回结果不代表你对目标仓库没有访问权限,不能作为权限校验依据。
验证步骤
- 先修正POST请求的格式,正确的调用命令如下:
curl -X POST \ -H "Authorization: token <替换成你的PAT令牌>" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/<替换成仓库所属账号/组织名>/<替换成仓库名>/actions/runners/registration-token
- 如果还是报错,可以先调用仓库基础信息接口验证PAT对目标仓库的访问权限是否正常:
curl -H "Authorization: token <替换成你的PAT令牌>" https://api.github.com/repos/<替换成仓库所属账号/组织名>/<替换成仓库名>
如果该接口能正常返回仓库的基础信息,说明PAT的仓库访问权限配置正常,补充Actions读写权限后即可正常调用注册token接口。
内容的提问来源于stack exchange,提问作者Niru
相关产品推荐
相关产品推荐

