Подтвердить что ты не робот

GitHub OAuth2 Token: Как ограничить доступ к чтению одного частного репо

Использование случая:

  • Приложение командной строки (которое развертывается на стороннем компьютере) должно иметь возможность загружать копию архива частного репо, принадлежащую организации, через API GitHub (v3)

  • Приложение должно иметь доступ только к одному частному репо и другим репозиториям с разрешенным только для чтения разрешением.

Я смог выполнить (1), создав авторизацию для приложения после регистрации client_id/secret в моей учетной записи github. Однако, похоже, что токены, возвращаемые авторизацией, допускают доступ только для чтения к репо и не ограничиваются одним репо (например, можно было бы использовать токен для изменения этого репо вместе с другими, принадлежащими организации).

Можно ли ограничить доступ через надлежащую область? Я не вижу ничего в документах API (https://developer.github.com/v3/oauth/#scopes).

4b9b3361

Ответ 1

Я не верю, что вы можете ограничить токены Github OAuth таким образом. github docs для OAuth говорят, что

В то время как Git через HTTP с OAuth уменьшает трение для некоторых типов приложений, имейте в виду, что в отличие от ключей развертывания токены OAuth работают для любого репозитория, для которого пользователь имеет доступ.

Итак, хотя вы можете ограничить область действия токена в терминах типов действий, вы не можете ограничить его подмножеством репозиториев.

Развернуть ключи можно ограничить одним репо, но разрешить доступ на запись.

Очевидная тактика (как упоминается Томасом) заключается в создании фиктивной учетной записи, представляющей приложение. Учитывая цели OAuth, это может быть лучшим документооборотом в любом случае - это позволит вам легко изменять разрешения, которые имеет приложение, как если бы оно было на самом деле пользователем.

Github даже упоминает/одобряет эту стратегию явно, называя их пользователями машин.