【问题标题】:Octokit - how to authenticate as an app (JWT)Octokit - 如何作为应用程序进行身份验证 (JWT)
【发布时间】:2026-02-06 12:50:01
【问题描述】:

所以我正在构建一个 github 应用程序,并且我希望能够作为应用程序进行身份验证,以便我可以作为该用户进行 graphql 调用。所以,我可以作为应用程序进行身份验证,并获取 JWT,但我似乎无法使用 JWT。代码如下:

const { Octokit } = require("@octokit/core");
const { createAppAuth} = require("@octokit/auth-app");
const fs = require('fs')

const auth = createAppAuth( {
  appId: process.env.APP_ID,
  privateKey: fs.readFileSync(__dirname + "/../" + process.env.PRIVATE_KEY_PATH, "utf-8"),
  clientId: process.env.CLIENT_ID,
  clientSecret: process.env.WEBHOOK_SECRET
})

// Send requests as GitHub App
async function main() {
  const {token} = await auth({type: "app"})
  console.log(token);
  const appOctokit = new Octokit({
    baseUrl: 'https://github.<company>.com/api/v3',
    auth: `token ${token}`
  });
  const { slug } = await appOctokit.request("GET /user");
  console.log("authenticated as %s", slug);
}

main().then().catch(err => {
  console.log(err.message)
  console.log(err.stack)
  console.log("oops")
})

我最终得到一个 HttpError: Bad Credentials。

我错过了什么?

【问题讨论】:

    标签: authentication jwt octokit


    【解决方案1】:

    但是,错误凭据错误的原因是您正在尝试作为 GET /user 请求的应用程序进行身份验证。这是一个用户特定的请求,需要 OAuth 令牌。

    尝试发送GET /app,它应该可以工作。

    如果您确实想以用户身份进行身份验证,那么有两种方法可以通过 GitHub 应用程序接收 OAuth 令牌(GitHub 调用这些用户到服务器令牌,因为该令牌由应用程序和用户)。

    1. OAuth 网络流
    2. OAuth 设备流程

    对于 Web 流,请参阅 https://github.com/octokit/auth-app.js/#user-authentication-web-flow。您将需要一个可以接收来自 GitHub 的 http 重定向的服务器。您可以使用@octokit/app SDK 为该和其他 OAuth 相关用例导出节点中间件,以及 webhook:https://github.com/octokit/app.js/#middlewares

    有关 OAuth 设备流程,请参阅 https://github.com/octokit/auth-app.js/#user-authentication-device-flow

    如果您想在不暴露 OAuth 客户端密钥的情况下使用 OAuth 设备流进行身份验证,您可以使用专用的 OAuth 设备流身份验证策略:https://github.com/octokit/auth-oauth-device.js

    【讨论】:

      最近更新 更多