如何安全地将Github应用程序安装ID与与与Github应用程序集成的网站的帐户相关联



我正在构建一个围绕我的GitHub应用程序集成的网站。

这个网站有自己的用户(来自Google oAuth(,他们可以通过安装我的GitHub应用程序将自己的帐户连接到GitHub帐户。

GitHub应用程序安装过程中有一些东西我无法理解:

用户在GitHub:上安装我的应用程序后

  • 他们的浏览器被重定向到URL("安装后安装URL"(,URL中有安装ID。

  • GitHub调用我的webhook来声明安装

安装ID是一个合理的信息,就好像我的网站的恶意用户(攻击者(可以欺骗我的网站将他们的帐户与其他人(受害者(的GitHub安装ID相关联,我的网站会代表攻击者在受害者的GitHubneneneba API上运行(这很糟糕!(。

现在,我的目标是将此安装ID安全地绑定到我的网站的用户所谓安全,我的意思是,我的网站不可能授予攻击者安装我的应用程序的受害者GitHub的权限。

使用在";安装后安装URL";将此安装绑定到我的网站的帐户是不安全的,因为我无法验证此安装ID";属于";我的网站的用户,因为知道受害者的有效安装ID的攻击者可以伪造URL。

不完善的缓解措施:

  • 断言安装ID未绑定到我的网站的任何其他用户帐户

    • 糟糕,因为如果出于某种原因合法用户从未使用";安装后安装URL";将此GitHub安装ID绑定到他的帐户

    • 在任何情况下都很糟糕;种族;(或定时?(对确认的攻击(如果攻击者设法在受害者之前确认有效的安装ID(

  • 与在webhook 上接收到的GitHub API事件一起使用

    • webhook是由Github后端触发的,因此无法识别登录的网站用户,这无助于我们将Github安装ID绑定到正确的网站用户

我是遗漏了什么,还是这是应用程序授权模型的缺陷?

找到答案:

我需要激活";在安装期间请求用户授权(OAuth(";。通过这种方式,GitHub使用一个安全令牌来回答问题,我可以使用该令牌来验证安装,而不仅仅是安装ID。

文件:https://docs.github.com/en/free-pro-team@最新/开发者/应用程序/识别和授权github应用程序的用户#网络应用程序流