是否有办法让安装GitHub应用程序的用户生成永久安装访问令牌,应用程序可以使用该令牌来验证和执行该应用程序的操作?
我想创建一个简单的GitHub应用程序,它将在CI服务器上运行,并使用来自其中一个测试的数据对PR进行评论。
由于用户在其CI服务器上运行此应用程序,因此无法存储GitHub应用程序的私钥,该私钥通常用于生成访问令牌,如here所述。
理想情况下,如果用户可以为应用生成永久安装访问令牌,则当应用在CI服务器上运行时,他们可以安全地为应用提供该密钥,以便应用可以与GitHub API通信并作为应用进行身份验证。
我意识到用户可以提供用户访问令牌,应用程序可以通过这种方式进行身份验证 - 但是当应用评论时,它需要显示为源自应用,而不是用户(我不相信如果应用程序使用用户访问令牌进行身份验证,则会发生这种情况。)
答案 0 :(得分:1)
我认为你可能会感到困惑" GitHub Apps"使用更通用的工具来访问GitHub API。 Apps系统是为GitHub构建托管服务的特定方式,它具有自己的身份验证模型。用户无法自行运行应用程序,因为它仅围绕托管/ SaaS工具设计。对于某人自己运行的东西,您需要最终用户在GitHub上为机器人创建一个新用户帐户,然后进行身份验证(OAuth或个人访问令牌,并不重要)。
答案 1 :(得分:0)
这是一个老问题,但为了在此处获得正确信息...
@osowskit 的回答是正确的,提到您需要使用 JWT,但不是必须使用 webhooks 来完成。使用 Apps 进行访问控制确实有一些优势 - GitHub App 可以只对某些 repos 进行特定访问。现在至少有一些 CI 系统(至少是 Jenkins)支持 GitHub 应用程序对某些用途的本地访问。
原始请求中的基本缺陷是请求与应用关联的永久 PAT。这不是他们的工作方式。相反,您为应用程序生成一个私钥,它应该存储在 CI 机密系统中。现在您确实需要某种 PAT 来实际执行操作 - 在这里添加 PR 评论 - 只是您没有永久的评论。相反,您每次需要运行时都会生成临时 PAT - IIRC 这些 PAT 持续大约一个小时,因此对于大多数单个作业很有用,但每次都生成而不是这样存储。
获得代码后,使用 jwt 令牌没什么大不了的 - 它只涉及几个额外的 REST 调用。
答案 2 :(得分:-1)
是否有办法让安装GitHub应用程序的用户生成永久安装访问令牌,应用程序可以使用该令牌来验证和执行该应用程序的操作?
也许但是没有必要。 GitHub应用程序仅对用户授予其访问权限的数据执行操作。应用程序在GitHub上修改的任何数据都将显示为应用程序“执行”的操作。
理想情况下,如果用户可以为应用生成永久安装访问令牌,则当应用在CI服务器上运行时,他们可以安全地为应用提供该密钥,以便应用可以与GitHub API通信并作为应用进行身份验证。
根据您提供的信息,这不是必需的。用户授予对GitHub应用程序的访问权限以访问特定资源并监听特定事件; GitHub应用程序需要安装ID(或多个安装ID)才能与GitHub数据进行交互。
好消息是,对于您概述的CI工作流程,GitHub会在webhook有效负载中发送安装ID - 可能是push
事件。
我意识到用户可以提供用户访问令牌,应用程序可以通过这种方式进行身份验证 - 但是当应用程序注释时,它需要显示为来自应用程序,而不是用户(我不相信如果应用使用用户访问令牌进行身份验证,则会发生。)
不需要生成个人访问令牌(PAT),并且创建了GitHub应用程序以避免创建服务帐户或向CI环境添加凭据。
installation id
installation access token
。installation access token
修改数据。请注意,此令牌会在一小时后到期。