在ADO流水线任务中调用GitHub REST API遇Bad credentials错误的解决方法
解决GitHub API调用「Bad credentials」错误的方案
确认令牌类型与权限
- 你创建的应该是GitHub个人访问令牌(PAT),仓库密钥是用于加密仓库内部敏感数据的,不能用来做API认证。
- 生成PAT时必须勾选
repo权限组(至少要包含能读取分支保护规则的权限,比如repo:status、针对私有仓库的完整repo权限);如果是组织仓库,还要确认组织没有限制该PAT的权限范围。
修正ADO变量的引用与配置
- 在Bash脚本里,ADO流水线变量的正确引用格式是
$var(而非$(var)),如果是秘密变量,必须在流水线变量设置中勾选「允许脚本访问此变量」,否则脚本读不到变量值,传递空令牌必然触发认证错误。 - 可以临时在脚本里加一行
echo $TOKEN(测试完立刻删掉,别泄露令牌),确认变量是否正确传递。
验证令牌本身的有效性
- 先在本地终端测试令牌是否能用,替换成你的PAT、仓库路径和分支名:
如果本地也返回Bad credentials,直接重新生成PAT并确认权限勾选正确。curl -H "Authorization: Bearer YOUR_PAT" https://api.github.com/repos/OWNER/REPO_NAME/branches/BRANCH/protection
修正API URL的格式
REPO变量必须是完整的仓库路径,格式为OWNER/REPO_NAME(比如octocat/hello-world),不能只写仓库名xyz,否则API地址无效,也会导致认证错误。
修正脚本中的转义问题
原脚本里的"是HTML转义字符,在Bash中要直接用双引号",修正后的完整脚本示例:
- task: Bash@3 inputs: targetType: 'inline' script: | TOKEN=$var BRANCH="abc" REPO="OWNER/xyz" # 替换为实际的所有者/仓库名 API_URL="https://api.github.com/repos/$REPO/branches/$BRANCH/protection" response=$(curl -s -H "Authorization: Bearer $TOKEN" "$API_URL") echo "Branch Protection rules" echo "$response"
内容的提问来源于stack exchange,提问作者user22503298
相关产品推荐
相关产品推荐

