Octokit - 如何作为应用程序进行身份验证 (JWT)
Octokit - how to authenticate as an app (JWT)
所以我正在构建一个 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。
我错过了什么?
尽管出现错误凭据错误的原因是您正在尝试验证为 GET /user
请求的应用程序。这是一个特定于用户的请求,需要 OAuth 令牌。
尝试发送 GET /app
,应该可以。
如果您确实想以用户身份进行身份验证,则有两种方法可以通过 GitHub 应用程序接收 OAuth 令牌(GitHub 调用这些用户到服务器令牌,因为令牌由应用程序和用户授权。
- OAuth 网络流程
- OAuth 设备流程
有关网络流程,请参阅https://github.com/octokit/auth-app.js/#user-authentication-web-flow. You will need a server that can receive the http redirect from GitHub. You can use the @octokit/app
SDK which exports a node middleware for that and other OAuth related usecases , as well as webhooks: https://github.com/octokit/app.js/#middlewares
有关 OAuth 设备流程,请参阅 https://github.com/octokit/auth-app.js/#user-authentication-device-flow。
如果您想使用 OAuth Device Flow 进行身份验证而不暴露 OAuth Client Secret,您可以使用专用的 OAuth Device Flow 身份验证策略:https://github.com/octokit/auth-oauth-device.js
所以我正在构建一个 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。
我错过了什么?
尽管出现错误凭据错误的原因是您正在尝试验证为 GET /user
请求的应用程序。这是一个特定于用户的请求,需要 OAuth 令牌。
尝试发送 GET /app
,应该可以。
如果您确实想以用户身份进行身份验证,则有两种方法可以通过 GitHub 应用程序接收 OAuth 令牌(GitHub 调用这些用户到服务器令牌,因为令牌由应用程序和用户授权。
- OAuth 网络流程
- OAuth 设备流程
有关网络流程,请参阅https://github.com/octokit/auth-app.js/#user-authentication-web-flow. You will need a server that can receive the http redirect from GitHub. You can use the @octokit/app
SDK which exports a node middleware for that and other OAuth related usecases , as well as webhooks: https://github.com/octokit/app.js/#middlewares
有关 OAuth 设备流程,请参阅 https://github.com/octokit/auth-app.js/#user-authentication-device-flow。
如果您想使用 OAuth Device Flow 进行身份验证而不暴露 OAuth Client Secret,您可以使用专用的 OAuth Device Flow 身份验证策略:https://github.com/octokit/auth-oauth-device.js