Cas d'utilisation:
L'application de ligne de commande (qui est déployée sur une machine tierce) doit pouvoir télécharger une copie tarball d'un dépôt privé appartenant à une organisation via l'API GitHub (v3)
L'application ne doit pouvoir accéder qu'à ce référentiel privé et à aucun autre référentiel avec une autorisation en lecture seule.
J'ai pu accomplir (1) en créant une autorisation pour l'application après avoir enregistré un client_id/secret sur mon compte github. Cependant, il ne semble pas que les jetons renvoyés par l'autorisation permettent un accès en lecture seule au référentiel ni ne soient limités à un seul référentiel (par exemple, on pourrait potentiellement utiliser le jeton pour modifier ce référentiel avec d'autres membres de l'organisation).
Est-il possible de restreindre l'accès via la portée appropriée? Je ne vois rien de pertinent dans les documents de l'API ( https://developer.github.com/v3/oauth/#scopes ).
Je ne crois pas que vous puissiez restreindre les jetons github OAuth de cette façon. Les documents github pour OAuth disent que
Alors que Git sur HTTP avec OAuth réduit la friction pour certains types d'applications, gardez à l'esprit que contrairement aux clés de déploiement, les jetons OAuth fonctionnent pour tout référentiel pour lequel l'utilisateur) a accès.
Ainsi, bien que vous puissiez limiter la portée du jeton en termes de types d'activités, vous ne pouvez pas le limiter à un sous-ensemble de repos.
Déployer les clés peut être limité à un seul dépôt, mais autoriser l'accès en écriture.
La tactique évidente (comme mentionné par Thomas) est de créer un compte factice qui représente l'application. Compte tenu des objectifs d'OAuth, cela pourrait être un meilleur flux de travail dans tous les cas - cela vous permettra de modifier facilement les autorisations dont l'application dispose comme si elle était en fait un utilisateur.
Github mentionne/approuve même explicitement cette stratégie, les appelant tilisateurs de la machine .