如何允许 public 应用程序在没有访问令牌的情况下连接到 GitHub API v4?
How to allow a public app to connect to the GitHub API v4 without an access token?
我决定尝试在 GitHub 上管理我的一个应用程序的发布,就像 GitHub 操作一样,我可以在 Mac、Linux 和 Windows 并自动将工件推送到 GitHub 发布页面,任何人都可以从该页面下载应用程序。
但是,我希望我的应用程序能够自我更新,因此应用程序本身也需要能够查询 repo 版本中的最新版本,然后为用户下载相关资产 OS ...我认为这不是问题...但是,没有 OAuth 应用程序或个人访问令牌就无法访问 GitHub API v4。
我不想要 OAuth 应用程序,因为我的应用程序的用户绝对不会成为 GitHub 客户。所以我尝试使用个人访问令牌,其唯一范围是访问 public 发布资产(同样,这是一个 public 资源,任何人都可以去手动下载)。
因为这个令牌不能做任何你或其他任何人不能手动做的事情,即使没有 GitHub 帐户,我认为将令牌放在我的应用程序的源代码中会很好,但是 GitHub 在提交时检测到令牌时撤销令牌。
有解决这个问题的好方法吗?我应该将令牌放在 GitHub 秘密中,然后在编译期间尝试用它替换占位符吗?我想避免这种情况,因为这让我很难在本地测试应用程序,而且,它没有解决任何问题,因为任何人都可以轻松反编译应用程序并在那里找到令牌(假设 GitHub 不会检测到秘密存在于编译期间的 "processed" 源代码中)。
如有任何建议,我们将不胜感激。
however, there's no way to access the GitHub API v4 without either an OAuth app or a personal access token.
GitHub API v3 确实支持未经身份验证的调用,但每个 IP 地址限制为 60 requests/hr:https://developer.github.com/v3/#rate-limiting
For unauthenticated requests, the rate limit allows for up to 60 requests per hour. Unauthenticated requests are associated with the originating IP address, and not the user making requests.
Latest Release API docs will show you what information is returned, but I suspect you'll need to make a secondary call to List Assets for a release知道客户端需要下载的文件
如果这不令人满意(例如,您知道您将有许多客户端尝试使用相同的 IP 地址进行更新),并且您希望确保它们不受速率限制,请继续阅读其他内容方法。
Is there a good way to work around this?
我要解决这个问题的方法是部署一个小型 Web 服务(例如 Heroku dyno),您的应用无需身份验证即可调用该服务,然后执行实际查找最新版本(使用嵌入的 PAT 作为一个环境变量)和 return 一个简单的 JSON 客户端可以理解的响应。
好处:
- 客户端中没有嵌入令牌
- 开发模式甚至可以调用相同的服务
- 向服务添加客户端将执行的逻辑以简化您的应用程序
- 例如调用
/latest/beta
或 /latest/stable
表示正在寻找特定频道
- 同时执行 API 调用和 return 客户需要的资产
- 可以在必要时更新服务中的令牌(例如刷新令牌)而无需更改客户端
- 可以缓存响应以降低速率受限的风险
缺点:
- 在您的整体架构中需要管理更多移动部件
- 如果有很多客户端连接,需要担心服务的正常运行时间
- 这可以通过使客户端对故障案例具有弹性来抵消
我决定尝试在 GitHub 上管理我的一个应用程序的发布,就像 GitHub 操作一样,我可以在 Mac、Linux 和 Windows 并自动将工件推送到 GitHub 发布页面,任何人都可以从该页面下载应用程序。
但是,我希望我的应用程序能够自我更新,因此应用程序本身也需要能够查询 repo 版本中的最新版本,然后为用户下载相关资产 OS ...我认为这不是问题...但是,没有 OAuth 应用程序或个人访问令牌就无法访问 GitHub API v4。
我不想要 OAuth 应用程序,因为我的应用程序的用户绝对不会成为 GitHub 客户。所以我尝试使用个人访问令牌,其唯一范围是访问 public 发布资产(同样,这是一个 public 资源,任何人都可以去手动下载)。
因为这个令牌不能做任何你或其他任何人不能手动做的事情,即使没有 GitHub 帐户,我认为将令牌放在我的应用程序的源代码中会很好,但是 GitHub 在提交时检测到令牌时撤销令牌。
有解决这个问题的好方法吗?我应该将令牌放在 GitHub 秘密中,然后在编译期间尝试用它替换占位符吗?我想避免这种情况,因为这让我很难在本地测试应用程序,而且,它没有解决任何问题,因为任何人都可以轻松反编译应用程序并在那里找到令牌(假设 GitHub 不会检测到秘密存在于编译期间的 "processed" 源代码中)。
如有任何建议,我们将不胜感激。
however, there's no way to access the GitHub API v4 without either an OAuth app or a personal access token.
GitHub API v3 确实支持未经身份验证的调用,但每个 IP 地址限制为 60 requests/hr:https://developer.github.com/v3/#rate-limiting
For unauthenticated requests, the rate limit allows for up to 60 requests per hour. Unauthenticated requests are associated with the originating IP address, and not the user making requests.
Latest Release API docs will show you what information is returned, but I suspect you'll need to make a secondary call to List Assets for a release知道客户端需要下载的文件
如果这不令人满意(例如,您知道您将有许多客户端尝试使用相同的 IP 地址进行更新),并且您希望确保它们不受速率限制,请继续阅读其他内容方法。
Is there a good way to work around this?
我要解决这个问题的方法是部署一个小型 Web 服务(例如 Heroku dyno),您的应用无需身份验证即可调用该服务,然后执行实际查找最新版本(使用嵌入的 PAT 作为一个环境变量)和 return 一个简单的 JSON 客户端可以理解的响应。
好处:
- 客户端中没有嵌入令牌
- 开发模式甚至可以调用相同的服务
- 向服务添加客户端将执行的逻辑以简化您的应用程序
- 例如调用
/latest/beta
或/latest/stable
表示正在寻找特定频道 - 同时执行 API 调用和 return 客户需要的资产
- 例如调用
- 可以在必要时更新服务中的令牌(例如刷新令牌)而无需更改客户端
- 可以缓存响应以降低速率受限的风险
缺点:
- 在您的整体架构中需要管理更多移动部件
- 如果有很多客户端连接,需要担心服务的正常运行时间
- 这可以通过使客户端对故障案例具有弹性来抵消