You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub PAT调用API返回401但CLI正常:差异原因探究

问题概述

所有个人访问令牌(Personal Access Token,PAT)在使用curl或直接API调用时均返回401 Bad credentials错误,但GitHub CLI认证完全正常。该问题影响包括新创建令牌在内的所有令牌。

环境信息

  • 操作系统:WSL2(Ubuntu 24.04.2 LTS)+ Windows PowerShell
  • 账号类型:个人GitHub账号(非组织账号)
  • 问题起始时间:在WSL中大量使用Claude Code之后
  • 测试环境:通过移动热点在多个IP地址测试

有效与无效场景对比

✅ 正常可用 - GitHub CLI

gh auth login  # 浏览器认证成功
gh auth status # 显示已认证状态
gh api user    # 成功返回用户数据

❌ 认证失败 - 使用相同令牌的直接API调用

# 从正常工作的GitHub CLI中获取令牌
TOKEN=$(gh auth token)
echo $TOKEN  # 显示有效令牌:gho_xxxxxxxxxxxx

# 相同令牌在curl中认证失败
curl -H "Authorization: token $TOKEN" https://api.github.com/user
# 返回结果:{"message": "Bad credentials", "status": "401"}

# 使用Bearer格式同样失败
curl -H "Authorization: Bearer $TOKEN" https://api.github.com/user
# 返回结果:{"message": "Bad credentials", "status": "401"}

已完成的全面测试

✅ 多令牌创建测试

  • 创建了5+个拥有完整权限(repo、workflow、user、admin:repo_hook)的新令牌
  • 涵盖经典令牌与细粒度令牌
  • 所有令牌均立即触发401错误

✅ 环境测试

  • 在WSL与Windows PowerShell中均测试过 - 错误一致
  • 在不同IP地址(移动热点)测试 - 错误一致
  • 未配置代理设置

✅ 账号验证

gh api user/orgs  # 返回[](无组织)
gh config get host  # 返回空值(默认GitHub.com)
gh api user  # 成功返回完整用户信息

✅ 认证请求头测试

# 以下方式均返回相同的401错误:
curl -H "Authorization: token TOKEN" https://api.github.com/user
curl -H "Authorization: Bearer TOKEN" https://api.github.com/user  
curl -u "username:TOKEN" https://api.github.com/user

核心疑问

为何使用完全相同的令牌,GitHub CLI可正常认证但直接API调用却失败?

  • GitHub CLI使用相同的REST API端点
  • 令牌拥有所有必要权限
  • 无组织/企业级限制
  • 无IP限制(已在多个网络测试)

具体问题

  1. GitHub CLI使用的认证机制与直接使用PAT有何不同?
  2. 是否存在影响PAT使用但不影响CLI的隐藏账号级限制?
  3. curl是否缺失了特定的请求头或User-Agent要求?

补充背景

问题始于大量使用Claude Code(Anthropic的工具)之后,该工具频繁因认证问题离线。多次认证失败是否触发了账号级别的PAT限制?

非常欢迎关于GitHub CLI与直接PAT认证的内部差异的任何见解!

针对评论的更新

具体问题:curl认证返回401 "Bad credentials"错误,但GitHub CLI使用相同凭证可成功认证

复现步骤:

  1. 创建拥有repo权限的PAT
  2. 使用curl测试:curl -H "Authorization: token XXX" https://api.github.com/user → 返回401
  3. 使用gh CLI测试:gh api user → 成功

环境详情:

  • WSL2 Ubuntu 24.04.2 LTS
  • curl 7.81.0
  • GitHub CLI 2.40.1
  • 已在多个IP地址测试

核心问题:curl与GitHub CLI的认证方式差异由何导致?


内容的提问来源于stack exchange,提问作者Rebuild Factoryz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:45:22