我正在构建一个围绕我的 GitHub 应用程序集成的网站。
该网站有自己的用户(来自 Google oAuth),他们可以通过安装我的 GitHub 应用程序将他们的帐户连接到他们的 GitHub 帐户。
GitHub 应用程序安装过程中有些事情我无法理解:
用户在 GitHub 上安装我的应用程序后:
他们的浏览器被重定向到 URL(“安装后设置 URL”),并且 URL 中包含安装 ID。
GitHub 调用我的 webhook 来声明安装
安装 ID 是一个明智的信息,就好像我的网站的恶意用户(攻击者)可以欺骗我的网站将他们的帐户与其他人(受害者)的 GitHub 安装 ID 关联起来,我的网站将在 GitHub API 上运行受害者代表攻击者(这很糟糕!)。
现在,我的目标是将此安装 ID 安全地绑定到我网站的用户。所谓安全,是指我的网站不可能向攻击者授予对受害者 GitHub 安装我的应用程序的权限。
使用“安装后设置 URL”中提供的 GitHub 安装 ID 将此安装绑定到我的网站帐户是不安全的,因为我无法验证此安装 ID“属于”我的网站的用户,因为知道受害者的有效安装 ID 的攻击者可以伪造 URL。
不完善的缓解措施:
断言安装 ID 未绑定到我网站的任何其他用户帐户
不好的是,如果由于某种原因,合法用户从未使用“安装后设置 URL”将此 GitHub 安装 ID 绑定到他的帐户重定向到我的网站,则可以绕过它
无论如何,这很容易受到确认时的“竞赛”(或计时?)攻击(如果攻击者设法在受害者之前确认有效的安装 ID)
与 Webhook 上收到的 GitHub API Event 事件结合使用
我是否遗漏了什么,或者这是应用程序授权模型的缺陷?
npx create-probot-app my-first-app
我正在尝试使用链接中的命令安装 probot.github 应用程序: https://probot.github.io/docs/development/。我使用的是最新的 Node v19.3.0 和 npm 版本 9.2.0。但该应用程序尚未创建,并且失败并出现错误
npm WARN deprecated cross-spawn-async@2.2.5: cross-spawn no longer requires a build toolchain, use it instead
/Users/user1/.npm/_npx/ac7da0f8d6e6b5c7/node_modules/npm/index.js:4
throw new Error('The programmatic API was removed in npm v8.0.0')
^
Error: The programmatic API was removed in npm v8.0.0
at Object.<anonymous> (/Users/user1/.npm/_npx/ac7da0f8d6e6b5c7/node_modules/npm/index.js:4:9)
at Module._compile (node:internal/modules/cjs/loader:1218:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
at Module.load (node:internal/modules/cjs/loader:1081:32)
at Module._load (node:internal/modules/cjs/loader:922:12)
at Module.require (node:internal/modules/cjs/loader:1105:19)
at require (node:internal/modules/cjs/helpers:103:18)
at Object.<anonymous> (/Users/user1/.npm/_npx/ac7da0f8d6e6b5c7/node_modules/create-probot-app/bin/helpers/run-npm.js:7:31)
at Module._compile (node:internal/modules/cjs/loader:1218:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
at …
Run Code Online (Sandbox Code Playgroud) 目前我正在为我的谷歌表单的JS脚本使用“个人访问令牌”,因此该脚本可以自动创建GitHub问题。我想保留该凭证的访问权限,但将令牌或权限更改为 GitHub 组织的令牌或权限,因此访问权限不与我绑定,而是与团队绑定。我一直在阅读有关GitHub Apps 和 OAuth Apps 的内容,是否有可能这些对我的用例都没有用?这是一个脚本,我不想在中间进行任何人机交互,例如批准访问等。
我正在设置一个用于 ArgoCD 身份验证的 GitHub 应用程序。GitHub 应用程序设置已完成。但在 ArgoCD 中,它要求 GitHub 应用程序 ID 和 GitHub 应用程序安装 ID。我可以从 GitHub App 部分找到 App ID。但我找不到 GitHub 应用程序安装 ID。
有没有办法直接从 GitHub 网站设置部分找到 GitHub 应用程序安装 ID?或者我们需要使用GitHub API之类的吗?
我正在使用 Github 创建一个构建管道,它将对每个拉取请求创建检查运行以分析我的应用程序的性能。我已经创建了 Github 应用程序并将其安装到我的存储库中并生成了私钥。我需要执行Authenticating as an installation
以获得访问令牌。
但根据文档获取安装访问令牌,首先我必须获取该应用程序的安装列表,并且必须从该列表中找到特定的安装。但我不知道如何识别安装我的应用程序的特定存储库上引发的拉取请求事件的应用程序的特定安装 ID。
我不知道我错过了什么。
我\xe2\x80\x99创建了一个 GitHub 应用程序并将其安装在我的帐户中,使其可以访问我帐户中的私有存储库。GitHub 应用程序具有元数据的读取权限。\n然后,我生成了一个 JWT 并用它来创建安装访问令牌,按照此处的步骤操作。\n我尝试使用此令牌通过 GitHub 搜索 API 在上述私有存储库中搜索关键字如下:
\nhttps://api.github.com/search/code?q=abc+in:file+repo:username/private-repo\n
Run Code Online (Sandbox Code Playgroud)\n但是,这会返回以下响应。
\n{\n "message": "Validation Failed",\n "errors": [\n {\n "message": "The listed users and repositories cannot be searched either because the resources do not exist or you do not have permission to view them.",\n "resource": "Search",\n "field": "q",\n "code": "invalid"\n }\n ],\n "documentation_url": "https://docs.github.com/v3/search/"\n}\n
Run Code Online (Sandbox Code Playgroud)\n我尝试使用此访问令牌来获取此 GitHub 应用程序安装的存储库,并在响应中成功返回私有存储库。我认为这意味着安装可以访问私有存储库并且令牌按预期工作。\n使用的 API:https://api.github.com/installation/repositories
。
那么为什么搜索会失败呢?
\n使用 GitHub Api 时,您可以提供作者和提交者信息,例如当您创建PUT
文件时content
。
我希望能够使用 GitHub 应用程序,以便committer
人们了解提交是使用第三方工具完成的,并且作者信息保留为经过身份验证的用户。
目前,我使用应用程序名称作为应用程序域的电子邮件地址name
。committer
但这根本不会将提交与应用程序绑定在一起(例如:我必须使用该电子邮件创建一个机器人帐户才能使其显示任何类型的个人资料等,但这不会真正与我的 Github 应用程序绑定)。
这样做的正确方法是什么?或者我不应该尝试使用应用程序作为,committer
而只使用经过身份验证的用户作为committer
?
我正在尝试创建一个网站,允许用户授权其 GitHub 帐户,然后允许用户单击按钮create
。它会自动创建一个包含一些文件的新存储库。现在我很困惑我应该为此制作一个 GitHub 应用程序还是 OAuth 应用程序。我已经查看了文档,但仍然很困惑。我将托管该网站,这将允许任何拥有 GitHub 帐户的随机用户。最好的选择是什么?
我创建了一个新的 GitHub 应用程序,我正在尝试从 Node.js 进行身份验证。例如,我是 GitHub Apps 的新手,我不知道“installationId”应该是什么。那是应用ID吗?
我使用私钥成功获取了令牌,但是当我尝试使用 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', …
Run Code Online (Sandbox Code Playgroud) 我在 Azure 部署中心的下拉列表中看不到我的所有 Github 组织存储库。Azure 很久以前就已经被授权了,下拉列表正确地显示了所有的存储库,直到上周我在 DevOps 中玩的时候,不得不再次授权,但我认为它破坏了一些东西。现在在 DevOps 中,我可以看到组织的所有存储库,但在我的 Web 应用程序的部署中心却看不到,我只看到 3 个,这不是我想要的......
由于它已经被授权,我看不到它第一次询问的“授权”按钮。我可以“更改帐户”,但它什么也没做。
在 Github 上,我在“ Installed GitHub Apps ”中重新安装了 Azure Pipelines,以为这样可以解决问题,但事实并非如此。
Azure 应用服务也在“第三方访问”选项卡中获得批准。我尝试“拒绝访问/授予访问”但没有结果。
有没有办法取消Azure上的授权然后重新授权?或者也许我需要在 Github 组织设置中添加一些内容?
github-app ×10
github ×7
github-api ×5
node.js ×2
azure ×1
git ×1
github-oauth ×1
javascript ×1
npm ×1
oauth ×1
oauth-2.0 ×1
octokit-js ×1
octokit.net ×1
probot ×1