如何允许公共应用程序在没有访问令牌的情况下连接到GitHub API v4?

问题描述 投票:0回答:1

我已决定尝试像GitHub Actions一样在GitHub上管理我的一个应用程序的发行版,我可以在Mac,Linux和Windows上进行构建,并自动将工件推送到GitHub Releases页面,任何人都可以在其中下载该应用程序来自。

但是,我希望我的应用程序能够自我更新,因此,应用程序本身还需要能够查询回购版本中的最新版本,然后下载用户操作系统的相关资产...我认为这样是非发行...但是,如果没有OAuth应用或个人访问令牌,就无法访​​问GitHub API v4。

我不想要OAuth应用,因为绝对不希望我的应用的用户是GitHub客户。因此,我尝试使用个人访问令牌,该令牌的唯一范围是对公共发行资产的访问(同样,这是任何人都可以手动下载的公共资源)。

由于即使没有GitHub帐户,此令牌也无法做您或其他任何人无法做的事,我认为将令牌放入应用程序的源代码中会很好,但是GitHub在以下情况下撤消该令牌:它在提交时检测到它。

是否有解决此问题的好方法?我应该将令牌放在GitHub机密中,然后尝试在编译期间用它替换占位符吗?我想避免这种情况,因为这使我很难在本地测试该应用程序,而且它也无法解决任何问题,因为任何人都可以轻松地反编译该应用程序并在其中找到令牌(假设GitHub无法检测到其中存在的秘密)编译期间的“已处理”源)。

任何建议将不胜感激。

security release github-api
1个回答
0
投票
但是,如果没有OAuth应用或个人访问令牌,就无法访​​问GitHub API v4。

GitHub API v3确实支持未经身份验证的调用,但每个IP地址每小时最多只能请求60个请求:https://developer.github.com/v3/#rate-limiting

对于未经身份验证的请求,速率限制允许每小时最多60个请求。未经身份验证的请求与原始IP地址相关联,而不与发出请求的用户相关联。

Latest Release API文档将向您显示返回了什么信息,但是我怀疑您需要对List Assets for a release进行二次调用才能知道客户端需要下载的文件。

如果这不令人满意(例如,您知道您将有许多客户端尝试使用相同的IP地址进行更新),并且您想确保它们不受速率的限制,请继续阅读不同的方法。] >

是否有解决此问题的好方法?

我将通过部署小型Web服务(例如Heroku dyno)来解决此问题,您的应用无需身份验证即可调用该服务,然后该服务将对最新版本进行实际查找(使用嵌入为环境变量的PAT ),并返回客户端可以理解的简单JSON响应。

好处:

    没有令牌嵌入客户端
    • 开发模式甚至可以调用相同的服务
  • 为客户提供简化服务的逻辑服务
    • 例如呼叫/latest/beta/latest/stable表示它正在寻找特定频道
  • 同时执行API调用并返回客户端需要的资产
  • 可以在必要时更新服务中的令牌(例如刷新令牌),而无需更改客户端
  • 可以缓存响应以减少受速率限制的风险
  • 缺点:

      要在整个体系结构中管理的更多移动部件
    • 如果有很多客户端连接,则需要担心服务的正常运行时间
      • 可以通过使客户端对故障案例具有弹性来弥补这一点
  • © www.soinside.com 2019 - 2024. All rights reserved.