Как разрешить приложению publi c подключаться к GitHub API v4 без токена доступа? - PullRequest
0 голосов
/ 26 апреля 2020

Я решил попробовать управлять выпусками одного из моих приложений на GitHub, так как с помощью действий GitHub я могу использовать Ma c, Linux и Windows и автоматически отправлять артефакты в GitHub. Страница релизов, где каждый может go и загрузить приложение с.

Однако я хочу, чтобы мое приложение самообновлялось, поэтому само приложение также должно иметь возможность запрашивать последнюю версию в репозитории. выпуски, а затем загрузите соответствующий ресурс для операционной системы пользователя ... который, как я думал, не представляет проблемы ... однако нет способа получить доступ к GitHub API v4 без приложения OAuth или маркера личного доступа.

Я не хочу приложение OAuth, потому что пользователи моего приложения абсолютно не должны быть клиентами GitHub. Поэтому я попытался использовать токен личного доступа, единственной областью которого был доступ к ресурсам публикации publi c (опять же, это ресурс publi c, который любой может go загрузить и загрузить вручную).

Как этот токен не может делать ничего, что вы или кто-либо другой не можете сделать вручную, даже без учетной записи GitHub, я думал, что было бы неплохо добавить токен в исходный код моего приложения, но GitHub отзывает токен, когда обнаруживает его на коммите.

Есть ли хороший способ обойти это? Должен ли я поместить токен в секрет GitHub, а затем попытаться заменить его во время компиляции ?? Я хотел избежать этого, так как это затрудняет мне локальное тестирование приложения, а также ничего не решает, так как любой может легко декомпилировать приложение и найти там токен (предположим, что GitHub не обнаружит секрет в «обработанные» источники во время компиляции).

Любые предложения будут оценены.

1 Ответ

1 голос
/ 27 апреля 2020

однако, невозможно получить доступ к GitHub API v4 без приложения OAuth или маркера личного доступа.

GitHub API v3 поддерживает вызовы без аутентификации, но он ограничен 60 запросов / час на IP-адрес: https://developer.github.com/v3/#rate - ограничение

Для неаутентифицированных запросов ограничение скорости допускает до 60 запросов в час. Неаутентифицированные запросы связаны с исходящим IP-адресом, а не с пользователем, который делает запросы.

Документация Latest Release API покажет вам, какая информация возвращается, но я подозреваю, что вам нужно будет сделать дополнительный вызов List Assets для выпуска , чтобы узнать, какие файлы необходимо загрузить клиенту.

Если это неудовлетворительно (например, вы знаете, что у вас будет многие клиенты пытаются выполнить обновление, используя один и тот же IP-адрес), и вы хотели бы убедиться, что они не ограничены в скорости, читайте для другого подхода.

Есть ли хороший способ обойти это?

Как бы я справился с этим, развернув небольшой веб-сервис (например, Heroku dyno), который может вызывать ваше приложение без проверки подлинности, который затем выполняет фактический поиск последней версии (используя PAT, который внедряется как переменная среды) и возвращает простой JSON ответ, понятный клиенту.

Преимущества:

  • нет токена, встроенного в клиент
    • режим разработки может даже вызывать одну и ту же службу
  • добавить logi c к услуге, которую клиент будет выполнять для упрощения ваше приложение
    • , например, вызов /latest/beta или /latest/stable, чтобы указать, что оно ищет определенный c канал
    • , выполняющий оба вызова API и возвращающий ресурсы, необходимые клиенту
  • может обновлять токен в службе при необходимости (например, для обновления sh токена) без изменения клиента
  • может кэшировать ответ для снижения риска ограничения скорости

Недостатки:

  • больше движущихся частей для управления в общей архитектуре
  • нужно беспокоиться о работоспособности службы, если множество клиентов подключено
    • это можно компенсировать, сделав клиент устойчивым к сбоям
...