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

如何在浏览器中用GitHub App获取私有仓库代码?认证失败求助

GitHub App 401 认证失败排查求助

我已完成以下操作:

  • 创建GitHub App
  • 配置Webhook
  • 通过Python生成JWT

随后在浏览器中运行以下测试代码请求私有仓库代码:

<script data-description="Github-App">
  function testJWT() {
    return new Promise((resolve) => {
      const xhr = new XMLHttpRequest();
      xhr.timeout = 5000;
      xhr.open(
        "GET",
        PR.head.repo.blobs_url.replace("{/sha}", `/${PR.head.sha}`)
      );
      xhr.setRequestHeader("Accept", "application/vnd.github+json");
      xhr.setRequestHeader("Authorization", `Bearer ${JWT}`);
      xhr.setRequestHeader("X-GitHub-Api-Version", `2024-11-26`);
      xhr.onreadystatechange = () => {
        if (xhr.readyState === XMLHttpRequest.DONE) {
          if (xhr.status === 200) {
            console.log(xhr.response);
          } else {
            console.error(xhr.response);
            alert("fail!");
            resolve();
          }
        }
      };
      xhr.send();
    });
  }

  testJWT();
</script>

请求失败,返回错误信息:

{
  "message": "Bad credentials",
  "documentation_url": "https://docs.github.com/rest",
  "status": "401"
}

我还尝试了octokit-App、octokit-Octokit、octokit-createAppAuth、OAuth2 key/secret等方式,均出现401认证失败,求排查方向。


排查建议

  1. JWT 有效性验证

    • 检查生成JWT时的App ID和私钥是否完全匹配,私钥需保持原始格式(包含-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----及中间的换行)
    • 确认JWT有效期不超过10分钟,过期需重新生成;可本地解码JWT查看iat(签发时间)、exp(过期时间)、iss(App ID)是否合法
  2. 权限与安装配置

    • 确认GitHub App已开启仓库内容读取权限,并已安装到目标私有仓库所在的账号/组织,且安装时选中了该私有仓库
  3. 认证流程修正

    • GitHub App的JWT不能直接调用仓库接口,正确流程是:
      1. 用JWT请求GET /app/installations获取对应安装的ID
      2. 用安装ID请求POST /app/installations/{installation_id}/access_tokens获取安装访问令牌
      3. 使用安装访问令牌(格式Bearer {access_token})发起仓库接口请求
  4. 环境与请求检查

    • 浏览器环境存在跨域限制,建议将认证逻辑放在后端(如Python服务)中完成,再由后端转发请求
    • 验证请求URL是否正确,替换后的blobs_url需符合GitHub API格式:https://api.github.com/repos/{owner}/{repo}/git/blobs/{sha}

内容的提问来源于stack exchange,提问作者宋万盛

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:13:20