À propos de GitHub Apps et OAuth apps
En général, les GitHub Apps sont préférables aux OAuth apps. Les GitHub Apps utilisent des autorisations de granularité fine, donnent à l’utilisateur davantage de contrôle sur les référentiels auxquels l’application peut accéder et utilisent des jetons à courte durée de vie. Ces propriétés contribuent à durcir la sécurité de votre application, car elles limitent les dommages potentiels en cas de divulgation des informations d’identification de votre application.
Comme les OAuth apps, les GitHub Apps peuvent toujours utiliser OAuth 2.0, générer un type de jeton OAuth (appelé jeton d’accès utilisateur) et effectuer des actions au nom d’un utilisateur. Toutefois, les GitHub Apps peuvent aussi agir indépendamment d’un utilisateur. Cela est utile pour les automatisations qui ne nécessitent pas d’entrée utilisateur. L’application pourra continuer de fonctionner même si la personne ayant initialement installé l’application sur une organisation quitte cette organisation.
Les GitHub Apps ont des webhooks intégrés centralisés. Les GitHub Apps peuvent recevoir des événements de webhook pour l’ensemble des référentiels et des organisations auxquels l’application a accès. À l’inverse, les OAuth apps doivent configurer des webhooks individuellement pour chaque référentiel et chaque organisation.
La limite de débit pour les GitHub Apps utilisant un jeton d’accès d’installation s’adapte au nombre de référentiels et au nombre d’utilisateurs dans l’organisation. À l’inverse, les OAuth apps ont des limites de débit inférieures et ne sont pas évolutives.
Il y a une situation où les OAuth app sont préférables aux GitHub App. Si votre application a besoin d’un accès aux ressources de niveau entreprise, telles que l’objet d’entreprise lui-même, vous devez utiliser une OAuth app parce qu’une GitHub App ne peut pas recevoir d’autorisations sur une entreprise. Les GitHub Apps peuvent toujours accéder aux ressources d’organisation et de référentiel appartenant à l’entreprise.
Pour plus d’informations sur les GitHub Apps, consultez « À propos de la création d’applications GitHub ».
Pour plus d’informations sur la migration d’une OAuth app existante vers une GitHub App, consultez « Migration d’applications OAuth vers des applications GitHub ».
Qui peut installer GitHub Apps et autoriser OAuth apps ?
Vous pouvez installer GitHub Apps dans votre compte personnel ou vos organisations. Si vous disposez d’autorisations d’administrateur dans un référentiel, vous pouvez installer GitHub Apps sur des comptes d’organisation. Si une application GitHub est installée dans un référentiel et nécessite des autorisations d’organisation, le propriétaire de l’organisation doit approuver l’application.
Par défaut, seuls les propriétaires d’organisation peuvent gérer les paramètres des applications GitHub dans une organisation. Pour permettre à d’autres utilisateurs de modifier les paramètres de développeur des applications GitHub appartenant à l’organisation, un propriétaire peut leur accorder des autorisations de gestionnaire d’applications GitHub. Les gestionnaires d’applications GitHub ne peuvent pas gérer les applications tierces. Pour plus d’informations sur l’ajout et la suppression de gestionnaires d’applications GitHub dans votre organisation, consultez Rôles dans une organisation.
Les utilisateurs autorisent cependant OAuth apps, ce qui permet à l’application d’agir au nom d’un utilisateur authentifié. Par exemple, vous pouvez autoriser une OAuth app qui trouve toutes les notifications pour l’utilisateur authentifié. Vous pouvez toujours révoquer des autorisations à partir d’une OAuth app.
Les propriétaires d’organisation peuvent choisir d’autoriser ou non les collaborateurs externes à demander l’accès aux OAuth apps et aux GitHub Apps non approuvées. Pour plus d’informations, consultez « Limitation des demandes et installations d’accès aux applications OAuth et GitHub ».
Avertissement
La révocation de toutes les autorisations d'une OAuth app supprime toutes les clés SSH que l'application a générées au nom de l'utilisateur, y compris les clés de déploiement.
| Applications GitHub | OAuth apps |
|---|---|
| Vous devez être propriétaire de l’organisation ou disposer d’autorisations d’administrateur dans un référentiel pour installer une application GitHub sur une organisation. Si une application GitHub est installée dans un référentiel et nécessite des autorisations d’organisation, le propriétaire de l’organisation doit approuver l’application. | Vous pouvez autoriser l’accès d’une OAuth app aux ressources. |
| Vous pouvez installer une application GitHub sur votre dépôt personnel. | Vous pouvez autoriser l’accès d’une OAuth app aux ressources. |
| Vous devez être propriétaire de l’organisation, propriétaire de référentiel personnel ou disposer d’autorisations d’administrateur dans un référentiel pour désinstaller une application GitHub et supprimer son accès. | Vous pouvez supprimer un jeton d’accès OAuth pour supprimer l’accès. |
| Vous devez être propriétaire de l’organisation ou disposer d’autorisations d’administrateur dans un référentiel pour demander une installation d’application GitHub. | Si une stratégie d’application d’organisation est active, tout membre d’une organisation peut demander d’installer une OAuth app sur une organisation. Un propriétaire de l’organisation doit approuver ou rejeter la demande. |
À quoi peuvent accéder GitHub Apps et OAuth apps ?
Des propriétaires de compte peuvent utiliser une GitHub App dans un compte sans octroyer d’accès à un autre. Par exemple, vous pouvez installer un service de construction tiers sur l’organisation de votre employeur, mais décider de ne pas accorder à ce service de construction l’accès aux dépôts dans votre compte personnel. Une application GitHub reste installée si la personne qui l’a configurée quitte l’organisation.
Une OAuth app autorisée a accès à toutes les ressources accessibles de l’utilisateur ou du propriétaire de l’organisation.
| Applications GitHub | OAuth apps |
|---|---|
| L'installation d'une application GitHub accorde l'accès de l'application aux dépôts choisis d'un utilisateur ou d'un compte d'organisation. | L’autorisation d’une OAuth app autorise l’accès de l’application aux ressources accessibles de l’utilisateur. Par exemple, les dépôts auxquels elles peuvent accéder. |
| Le jeton d’installation d’une application GitHub perd l’accès aux ressources si un administrateur supprime les dépôts de l’installation. | Un jeton d’accès OAuth perd l’accès aux ressources quand l’utilisateur perd l’accès, par exemple, quand il perd l’accès en écriture à un dépôt. |
| Les jetons d’accès d’installation sont limités aux dépôts spécifiés avec les autorisations choisies par le créateur de l’application. | Un jeton d’accès OAuth est limité par le biais d’étendues. |
| Les applications GitHub peuvent demander un accès séparé aux problèmes et aux pull requests sans accéder au contenu réel du dépôt. | OAuth apps doit solliciter l’étendue repo afin d’accéder aux problèmes, aux demandes de tirage ou à tout autre élément appartenant au référentiel. |
| GitHub Applications ne sont pas soumises aux stratégies d'application de l'organisation. Une application GitHub n’a accès qu’aux répertoires auxquels un propriétaire de l’organisation a accordé l’accès. | Si une stratégie d’application d’organisation est active, seul le propriétaire d’une organisation peut autoriser l’installation d’une OAuth app. Si elle est installée, l’application OAuth app obtient l’accès à tout ce qui est visible avec le jeton d'accès détenu par le propriétaire de l’organisation au sein de l’organisation approuvée. |
| Une application GitHub reçoit un événement de webhook lorsqu’une installation est modifiée ou supprimée. Cela indique au créateur de l’application quand celle-ci a reçu plus ou moins d’accès aux ressources d’une organisation. | Les OAuth apps peuvent perdre l’accès à une organisation ou à un référentiel à tout moment si l’utilisateur octroyant l’accès le modifie. L’application OAuth app ne vous informe pas quand elle perd l’accès à une ressource. |
Identification basée sur un jeton
Remarque
GitHub Apps peut également utiliser un jeton basé sur l’utilisateur. Pour plus d’informations, consultez « Authentification auprès d’une application GitHub pour le compte d’un utilisateur ».
| Applications GitHub | OAuth apps |
|---|---|
| Une application GitHub peut demander un jeton d’accès d’installation à l’aide d’une clé privée avec un format de jeton web JSON hors bande. | Une OAuth app peut échanger un jeton de demande contre un jeton d’accès après redirection via une demande web. |
| Un jeton d’installation identifie l’application comme bot GitHub Apps, tel que @jenkins-bot. | Un jeton d’accès identifie l’application comme étant l’utilisateur qui a accordé le jeton à l’application, par exemple, @octocat. |
| Les jetons d’accès d’installation expirent après une période prédéfinie (actuellement 1 heure). | Les jetons OAuth restent actifs jusqu’à ce que le client les révoque. |
| Les GitHub Apps installées sur des organisations ou des dépôts sont soumises à des limites de taux qui s’adaptent en fonction du nombre d’installations. Pour plus d’informations, consultez « Limites de débit pour les applications GitHub ». | Les jetons OAuth utilisent la limitation de débit de l’utilisateur de 5 000 requêtes par heure. |
| Les augmentations de limite de débit peuvent être accordées au niveau GitHub Apps (affectant toutes les installations) et au niveau de l’installation individuelle. | Les augmentations de la limite de débit sont accordées par OAuth app. Tout jeton accordé à cette OAuth app bénéficie d'une limite augmentée. |
| Les GitHub Apps peuvent s’authentifier pour le compte de l’utilisateur. Le flux d’autorisation est le même que le flux d’autorisation de l’OAuth app. Les jetons d’accès utilisateur peuvent expirer et être renouvelés avec un jeton d’actualisation. Pour plus d’informations, consultez « Actualisation des jetons d’accès utilisateur » et « Authentification auprès d’une application GitHub pour le compte d’un utilisateur ». | Le flux OAuth utilisé par les OAuth apps autorise une OAuth app pour le compte de l’utilisateur. C’est le même flux utilisé pour générer un jeton d’accès utilisateur d’GitHub App. |
Demande de niveaux d’autorisation pour des ressources
Contrairement à OAuth apps, les applications GitHub disposent d’autorisations ciblées qui leur permettent de demander l’accès uniquement à ce dont ils ont besoin. Par exemple, une application GitHub d’intégration continue (CI) peut demander l’accès en lecture au contenu du référentiel et l’accès en écriture à l’API d’état. Une autre application GitHub ne peut pas avoir d’accès en lecture ou en écriture au code, mais elle a toujours la possibilité de gérer les problèmes, les étiquettes et les jalons. Les OAuth apps ne peuvent pas utiliser d’autorisations granulaires.
| Accès | Applications GitHub (autorisations read ou write) | OAuth apps |
|---|
**Pour accéder aux dépôts publics** | Le dépôt public doit être choisi lors de l’installation. | Étendue `public_repo`. |
|
Pour accéder au code/contenu du dépôt | Contenu d’un dépôt | Étendue repo. |
|
Pour accéder aux problèmes, étiquettes et jalons | Problèmes | Étendue repo. |
|
Pour accéder aux pull requests, étiquettes et jalons | Demandes de tirage | Étendue repo. |
|
Pour accéder aux états de validation (pour les builds CI) | États de validation | Étendue repo:status. |
|
Pour accéder aux déploiements et aux états de déploiement | Déploiements | Étendue repo_deployment. |
|
Pour recevoir des événements via un webhook | Une application GitHub inclut un webhook par défaut. | Étendue write:repo_hook ou write:org_hook. |
Découverte d’un dépôt
| Applications GitHub | OAuth apps |
|---|---|
GitHub Apps peut examiner /installation/repositories pour voir les référentiels auxquels l’installation peut accéder. | OAuth apps peut consulter /user/repos pour obtenir une vue utilisateur ou /orgs/:org/repos pour une vue organisationnelle des référentiels accessibles. |
| GitHub Apps reçoit des webhooks lorsque les référentiels sont ajoutés ou supprimés de l’installation. | OAuth apps crée des webhooks d’organisation afin d’être notifié lorsqu’un nouveau référentiel est créé au sein d’une organisation. |
Webhooks
| Applications GitHub | OAuth apps |
|---|---|
| Par défaut, GitHub Apps disposent d’un webhook unique qui reçoit les événements auxquels ils sont configurés pour chaque dépôt auquel ils ont accès. | OAuth apps requiert l’étendue webhook afin de créer un webhook de référentiel pour chaque référentiel dont il doit recevoir les événements. |
| Les applications GitHub reçoivent certains événements au niveau de l'organisation avec l'autorisation d'un membre de l'organisation. | OAuth apps requiert l’étendue webhook d’organisation afin de créer un webhook d’organisation pour chaque organisation dont il doit recevoir les événements au niveau organisationnel. |
| Les webhooks sont automatiquement désactivés lorsque l’application GitHub est désinstallée. | Les webhooks ne sont pas automatiquement désactivés si le jeton d’accès d’une OAuth app est supprimé et qu’il n’existe aucun moyen de les nettoyer automatiquement. Vous devez demander aux utilisateurs de procéder manuellement. |
Accès à Git
| Applications GitHub | OAuth apps |
|---|---|
| Les applications GitHub requièrent l’autorisation des contenus du référentiel et utilisent le jeton d’accès de votre installation pour s’authentifier via Git fonctionnant sur HTTP. Pour plus d’informations, consultez Génération d’un jeton d’accès d’installation pour une application GitHub | OAuth apps requiert l’étendue write:public_key et crée une clé de déploiement par l’intermédiaire de l’API. Vous pouvez ensuite utiliser cette clé pour exécuter des commandes Git. |
| Le jeton est utilisé en tant que mot de passe HTTP. | Le jeton est utilisé en tant que nom d’utilisateur HTTP. |
Les comptes machines et bots
Les comptes d'utilisateur d'ordinateur sont des comptes personnels OAuth qui séparent les systèmes automatisés à l'aide du système utilisateur de GitHub.
Les comptes de bot sont spécifiques à GitHub Apps et sont intégrés à chaque application GitHub.
| Applications GitHub | OAuth apps |
|---|---|
| Les bots GitHub Application n’utilisent pas de GitHub Enterprise siège. | Un compte utilisateur machine utilise une licence GitHub Enterprise seat. |
| Étant donné qu'un bot d'application GitHub n'a jamais reçu de mot de passe, un client ne peut pas se connecter directement. | Un compte d’utilisateur de machine reçoit un nom d’utilisateur et un mot de passe que le client doit gérer et sécuriser. |