使用 @octokit 对 Github 应用程序进行身份验证

Posted

技术标签:

【中文标题】使用 @octokit 对 Github 应用程序进行身份验证【英文标题】:Authentication of a Github App with @octokit 【发布时间】:2019-01-30 17:03:40 【问题描述】:

我使用@octokit/rest访问github并尝试使用authenticate()函数进行身份验证。

const credentials =  type: 'oauth', key: process.env.GITHUB_ID, secret: process.env.GITHUB_SECRET 
octokit.authenticate(credentials)

我从我的 github 应用程序的设置页面获得了凭据(OAuth 凭据,位于页面底部),并且我检查了它们在进程环境中的设置是否正确。

https://www.npmjs.com/package/@octokit/rest#authentication 说,身份验证是同步的,因为它只为以下请​​求设置凭据,所以我在这里不使用await

这似乎有效,至少不会引发任何错误。

我创建检查运行的代码:

octokit.checks.create(...)

但是在运行这段代码时,我得到了错误

 HttpError: "message":"You must authenticate via a GitHub App.","documentation_url":"https://developer.github.com/v3/checks/runs/#create-a-check-run "
  at response.text.then.message (/usr/app/node_modules/@octokit/rest/lib/request/request.js:72:19)
  at process._tickCallback (internal/process/next_tick.js:68:7)

-- 如果我改为生成 JWT 令牌并像这样进行身份验证: const credentials = type: 'oauth', token: process.env.GITHUB_TOKEN

与 JWT 一样 eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MzUxMTEwNzcsImV4cCI6MTUzNTExMTY3NywiaXNzIjoiSXYxLjAwNjhkZjdkYzRmNjNkMGIifQ.KHb1V3Fh6WKLAlcZkQPntVehvl1frp3rdBT9-lOTJRzAx8JxGyxpEUnOdwbNU3gmx_G1Fu3E3QEbcCWs0L743HkJ4B53JQpni1cQ1YZ25e0HH3OO6HW4WycaYbgGPcZRZCDe0vocwaxKjHq16uG7jsfVLC4lR94GVxJQhu-w9WX9BVxE3x_yqKdMhFYhKvez8oBpAXRZFQbKtw2rb8TXHV3-PKXTRCfO_fR_Omr7J3Mw26yHdnoRK1pA7BS5O1P0UAFmWshLted2UbE0S8SU0ZoUnZE0QA3wW-o4Q4-6oEGCK9UWLnnHAfn11Ow7rKulSUyCvZgKV8niGSL7R97nWg

我收到以下回复:

"message":"Bad credentials","documentation_url":"https://developer.github.com/v3"

【问题讨论】:

【参考方案1】:

在使用 octokit.checks.create() 之前,您需要生成一个“安装令牌”,您可以通过将您的 JWT 传递到此端点来完成:https://api.github.com/app/installations/:installation_id/access_tokens

octokit/rest.js 有一个函数可以用来做到这一点:http://octokit.github.io/rest.js/#api-Apps-createInstallationToken

Learn more about authenticating with GitHub Apps

您可能还对Probot 感兴趣,这是一个大大简化了 GitHub 应用程序身份验证的 javascript 框架,对于与 Checks API 交互应该特别有用!

希望这会有所帮助:)

【讨论】:

非常感谢! Probot 包有一个问题,似乎不可能使用公司代理,所以我决定使用 octokit。如果您知道需要 JWT 进行身份验证以获取安装令牌,这实际上很容易。我使用octokit.authenticate( type: 'token', token: installation.data.token ),效果很好。

以上是关于使用 @octokit 对 Github 应用程序进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Octokit/rest 验证为 Github 应用程序

如何使用 Octokit 打开 Github Pages 进行 repo?

Rails 6 如何使用 Octokit 从 Github 文件获取中处理 404

使用 octokit.net 从 GitHub 下载代码

Probot:Octokit baseUrl 覆盖

使用 Octokit 或 GitHub Rest API 上传多个文件