gpt4 book ai didi

node.js - 如何在 Node.js 中验证 GitHub 应用程序?

转载 作者:太空宇宙 更新时间:2023-11-03 23:11:54 25 4
gpt4 key购买 nike

我创建了一个新的 GitHub 应用程序,并尝试从 Node 进行身份验证。例如,我是 GitHub Apps 的新手,我不知道“installationId”应该是什么。这是应用程序 ID 吗?

我使用私钥成功获取了 token ,但是当我尝试使用 API 时,我从 Node 和curl 收到错误。

import { createAppAuth } from '@octokit/auth-app';
import { request } from '@octokit/request';

const privateKey = fs.readFileSync(__dirname + 'file.pem');
const auth = createAppAuth({
id: 1,
privateKey,
installationId: 12345,
clientId: 'xxx.xxxxxx',
clientSecret: 'xxxxxx',
});

const appAuthentication = await auth({ type: 'app' });
console.log(`Git repo token: ` + appAuthentication.token);

const result = await request('GET /orgs/:org/repos', {
headers: {
authorization: 'token ' + appAuthentication.token,
},
org: 'orgname',
type: 'public',
});
return res.status(200).json({ message: 'Git result: ' + result });

这是我从上面的 Node 代码获取 token 后尝试的curl示例。

curl -i -X POST -H "Authorization: Bearer xxxxxxxxxx" -H "Accept: application/vnd.github.machine-man-preview+json" https://api.github.com/app

Node 中的结果:“Git 结果:Git 存储库错误:HttpError:错误的凭据”

curl 结果:{ "message": "未找到集成", “documentation_url”:“https://developer.github.com/v3”}

最佳答案

JSON Web token (JWT) 身份验证只能用于 GitHub REST API 的少数端点。主要是 https://developer.github.com/v3/apps/ 上列出的

对于所有其他人,您需要安装访问 token 。

你能试试这个吗?

const { token } = await auth({ type: "installation" });
const result = await request("GET /orgs/:org/repos", {
headers: {
authorization: "token " + token
},
org: "orgname",
type: "public"
});

请注意,installationId 选项必须设置为有效的安装 ID。当您在 github.com 上安装 GitHub 应用程序时,您会获得安装 ID。例如,您可以在 https://github.com/apps/wip 安装 WIP 应用程序。在您的帐户或您有管理员访问权限的任何组织上。安装 URL 如下所示:

https://github.com/settings/installations/90210

在上面的示例中,安装 ID 为 90210

为了简化代码,您可以使用auth.hook功能,在这种情况下,将根据URL自动设置正确的身份验证

import { createAppAuth } from "@octokit/auth-app";
import { request } from "@octokit/request";

const privateKey = fs.readFileSync(__dirname + "file.pem");
const auth = createAppAuth({
id: 1,
privateKey,
installationId: 12345
});

const requestWithAuth = request.defaults({
request: {
hook: auth.hook
}
})

const result = await requestWithAuth("GET /orgs/:org/repos", {
org: "orgname",
type: "public"
});

参见https://github.com/octokit/request.js/#authentication更多示例

关于node.js - 如何在 Node.js 中验证 GitHub 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60161028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com