Как вы аутентифицируете приложение GitHub в Node.js? - PullRequest
1 голос
/ 11 февраля 2020

Я создал новое приложение GitHub и пытаюсь пройти аутентификацию с Node. Я новичок в GitHub Apps, например, я не знаю, какой должен быть "InstallationId". Это идентификатор приложения?

Я успешно получаю токен, используя закрытый ключ, но когда я пытаюсь использовать API, я получаю сообщение об ошибке как от узла, так и от 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 });

Вот пример скручивания, который я попробовал после получения токена из кода узла выше.

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

Результат в узле: "Git result: Git Ошибка репо: HttpError: Bad credentials"

Результат в curl: {"message": "Интеграция не найдена", "documents_url": "https://developer.github.com/v3"}

1 Ответ

2 голосов
/ 24 февраля 2020

Аутентификация JSON Web Token (JWT) может использоваться только для нескольких конечных точек REST API GitHub. В основном те, которые перечислены в https://developer.github.com/v3/apps/

Для всех остальных вам нужен токен доступа для установки.

Можете ли вы попробовать это вместо этого?

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

Обратите внимание, что для параметра installationId должен быть задан действительный идентификатор установки. Вы получаете идентификатор установки при установке приложения GitHub на github.com. Например, вы можете установить приложение WIP по адресу https://github.com/apps/wip в своей учетной записи или любой организации, к которой у вас есть права администратора. URL-адреса установки выглядят так:

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

В приведенном выше примере идентификатор установки равен 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 для дополнительных примеров

...