Was sind GitHub-Apps?

Abgeschlossen

In dieser Einheit werden das Konzept, die Funktionsweise und die Verwendung von GitHub-Apps zur Verbesserung Ihrer Workflows erläutert. Es gibt immer Möglichkeiten, die eigenen Prozesse weiter zu verbessern, ob Sie nun eine von einem anderen Benutzer erstellte Lösung anwenden oder Ihre eigene Lösung entwickeln.

Erweitern der Plattform über die GitHub-API

GitHub bietet eine stabile API, die Entwickler*innen nahezu unbegrenzte Möglichkeiten auf der Plattform bietet. Sie wird über REST-Endpunkte verfügbar gemacht und kann daher problemlos mit jeder Plattform oder Programmiersprache integriert werden. Der API-Zugriff ist jedoch nicht eigenständig. Entwickler*innen, die ihre Features mit anderen teilen möchten, müssen diese als App packen und veröffentlichen, bevor sie von anderen verwendet werden können.

Bei der Entscheidung, ob eine OAuth-App oder eine GitHub-App in einen Workflow eingebunden werden soll, sind mehrere Faktoren zu berücksichtigen. In diesem Abschnitt lernen Sie GitHub-Apps und OAuth-Apps, die Unterschiede in der Nutzung und den Berechtigungen sowie Ereignisabonnements kennen.

Image of an install icon and an approve icon for GitHub Apps and OAuth Apps.

Beim Anpassen eines GitHub-Workflows stehen Ihnen verschiedene Funktionen zur Verfügung, wie etwa das Schreiben von benutzerdefinierten Skripten, das Erstellen und Autorisieren eigener OAuth-Apps oder das Installieren von GitHub-Apps, die auf dem GitHub Marketplace verfügbar sind. Im Allgemeinen verwenden Sie für solche einmaligen Aufgaben am besten Skripts. Für Aktionen, die häufiger ausgeführt werden müssen, können Sie die Automatisierung von OAuth- und GitHub-Apps nutzen, damit Sie und Ihr Team Zeit sparen und das optimale Maß an Sicherheit innerhalb Ihrer Workflows erhalten bleibt. Es gibt viele Unterschiede, die sich auf die Entscheidung auswirken, ob Sie eine GitHub-App oder eine OAuth-App verwenden. Wenn Sie diese Unterschiede bereits kennen, können Sie sich einige Probleme und Nacharbeiten ersparen und die beste Anwendung für Ihren speziellen Anwendungsfall in Ihrem Workflow finden.

Am Ende dieses Abschnitts werden Sie die Unterschiede zwischen einer GitHub-App und einer OAuth-App kennen und wissen, wie Sie eine App für die jeweilige Situation am besten auswählen.

Gewähren von Zugriff und Berechtigungen

Bevor Sie einer App Zugriff auf ein GitHub-Repository gewähren, sehen Sie sich die angeforderten Berechtigungen genau an. Manche Apps sind vertrauenswürdig, andere erscheinen verdächtig. Erteilen Sie einer App nur diejenigen Berechtigungen, die Ihnen geläufig sind und die Sie auch wirklich erteilen möchten.

Screenshot of reviewing requested permissions and repository access.

Hinweis

Jede App verwendet für die Anforderung von Daten in Ihrem Repository einen eindeutigen API-Schlüssel. Beim Gewähren von Zugriff autorisieren Sie diesen Schlüssel. Sie können den Zugriff auf einen App-Schlüssel jederzeit über die Repositoryeinstellungen widerrufen.

OAuth-Apps im Vergleich

OAuth-Apps bieten eine Möglichkeit, im Namen eines Benutzers oder einer Benutzerin auf GitHub-Daten zuzugreifen. Dabei ist zu beachten, dass ein lizenzierter GitHub-Arbeitsplatz erforderlich ist, da die Apps im Namen des Benutzers bzw. der Benutzerin handeln. Sie können eine OAuth-App in Ihrem persönlichen Konto oder auf Organisationsebene erstellen und registrieren, sofern Sie über Administratorzugriff verfügen. Eine in GitHub integrierte OAuth-App gibt an, welche Art von Zugriff auf die Organisation oder das Repository erforderlich ist. Benutzer*innen autorisieren OAuth-Apps, wodurch eine App z. B. beim Lesen oder Ändern von Daten als authentifizierter Benutzer dienen kann. Dieser Ansatz ist im Wesentlichen eine automatisierte Möglichkeit zum Lesen, Schreiben oder Bearbeiten GitHub-Daten als Benutzer*in. Darüber hinaus müssen Sie beachten, dass die Autorisierung auf die Ressourcen beschränkt ist, auf die Benutzer*innen zugreifen können. Dafür erhält die OAuth-App auf alle Ressourcen Zugriff, die für die Benutzer*innen verfügbar sind.

Hinweis

Die Zugriffsebene wird durch den Geltungsbereich des Tokens (Benutzer, Organisation, Repository) beschränkt.

Für Organisationen mit Einschränkungen für den Zugriff auf eine OAuth-App können Administrator*innen eine Genehmigung zur Verwendung der Anwendung erteilen. Mit Ereignisabonnements reagieren OAuth-Apps auf Aktivitäten, sobald sie geschehen.

GitHub Apps

Im Gegensatz dazu werden GitHub-Apps in Ihrem persönlichen Konto, in Organisationen, die Sie besitzen, oder in bestimmten Repositorys, auf die Sie Administratorzugriff haben, installiert. GitHub-Apps werden installiert und interagieren, nicht mit einzelnen Benutzer*innen, wie es bei OAuth-Apps der Fall ist, sondern mit GitHub-as-a-Service. Der Vorteil dabei ist, dass GitHub-Apps im Gegensatz zu OAuth-Apps keinen lizenzierten GitHub-Arbeitsplatz beanspruchen.

GitHub-Apps greifen auf Daten im Namen der Anwendung selbst über einen privaten Schlüssel zu, der zum Signieren eines JWT-Tokens (JSON Web Token) verwendet wird. Da sie in bestimmten Repositorys installiert werden, können Benutzer*innen bestimmen, auf welche Repositorys die App zugreifen kann. Dadurch wird die für die App zugängliche Menge an Daten beschränkt. Mit Berechtigungen wird festgelegt, auf welche Ressourcen die GitHub-App über die API zugreifen kann. Im Gegensatz zu OAuth-Apps verfügen GitHub-Apps über anpassbare Berechtigungen für Repositorydaten, Issues und Pull Requests. Auf diese Weise können Sie präzisere Berechtigungen erteilen und die App so beschränken, dass sie nur in den Repositorys lesen und schreiben kann, auf die sie zugreifen darf. Die Einstellung für GitHub-Apps in einer Organisation kann nur von Organisationsbesitzer*innen verwaltet werden.

Sie können GitHub-Apps im GitHub Marketplace finden und von dort installieren. Beachten Sie bei der Suche nach GitHub-Apps, dass einige Apps über einen verifizierten Badge verfügen. Dieser Badge ist ein Hinweis darauf, dass sich die App im Besitz einer Organisation befindet, die den Besitz ihrer Domain bestätigt hat, ihre E-Mail-Adressen beim GitHub-Support bestätigt hat und eine zweistufige Authentifizierung für ihre Organisation verlangt.

Image of a verified badge for a GitHub App.

  • Administrator*innen können Berechtigungen in Bezug auf die Repositoryverwaltung, auf Überprüfungen, Repositoryinhalte, Bereitstellungen und Issues erteilen. (Änderungen durch Administrator*innen erfordern die Zustimmung der Benutzer*innen.)
  • Administrator*innen können Benutzer*innen der App Berechtigungen erteilen, andere Benutzer*innen, E-Mails, Follower, GPG-Schlüssel, Git-SSH-Schlüssel, Starring und Überwachungen zu blockieren. (Änderungen durch Administrator*innen erfordern die Zustimmung der Benutzer*innen.)
  • Ereignisabonnements: Sicherheitsempfehlung, Check Suite, Erstellen, Bereitstellung, Fork, Bezeichnung, Mitglied, Einchecken, Commitkommentar, Löschen, Bereitstellungsstatus, Meilenstein, Mitgliedschaft, Organisation (Administrator*innen konfigurieren auf der GH-Apps-Benutzeroberfläche, es können Änderungen vorgenommen werden.)

Entscheiden zwischen GitHub-Apps und OAuth-Apps

GitHub-Apps sind in manchen Situationen eine ideale Lösung zur Integration in einen Workflow. Für größere Organisationen kann der Wechsel von der herkömmlichen Verwendung von OAuth-Apps hin zur Automatisierung jedoch eine Herausforderung darstellen. Beispielsweise können durch eine Einschränkung der Sicherheitsrichtlinien auch die Möglichkeiten von Administrator*innen bei der Verwendung der jeweiligen Tools eingeschränkt werden.

Hinweis

Als Systemadministrator sollten Sie mit Ihren Entwickler*innen gemeinsam nach den besten Optionen für die Automatisierung suchen, indem Sie die jeweiligen Anwendungen nutzen und gleichzeitig Ihre Sicherheitsrichtlinien weiterhin einhalten.

Wenn Sie herausfinden möchten, welche App die richtige Lösung für Ihre Situation ist, sollten Sie sich einige wichtige Fragen stellen:

  • Soll die App als Benutzer auftreten?
  • Welche Ratenbegrenzung muss festgelegt werden?
  • Welchen Zugriff soll die App in der Organisation und den Repositorys haben?
  • Entspricht die jeweilige App unserer Sicherheitsrichtlinie?

Im Folgenden finden Sie einige wichtige Merkmale und Unterschiede, die bei der Entscheidung zwischen einer GitHub-App oder einer OAuth-App zu berücksichtigen sind.

GitHub Apps OAuth-Apps im Vergleich
Durch die Installation einer GitHub-App erhält die App Zugriff auf die ausgewählten Repositorys eines Benutzer- oder Organisationskontos. Durch die Autorisierung wird einer OAuth-App Zugriff auf die zugänglichen Ressourcen des Benutzers (z. B. Repositorys) gewährt.
Die Zugriffstoken für die Installation werden mit den vom Ersteller der Anwendung ausgewählten Berechtigungen auf bestimmte Repositorys beschränkt. Ein OAuth-Zugriffstoken wird über Geltungsbereiche beschränkt.
Mit einem Token für die Installation wird die jeweilige App als GitHub-Apps-Bot identifiziert. Mit einem Zugriffstoken wird die jeweilige App als derjenige Benutzer identifiziert, der das Token für die App gewährt hat.
GitHub-Apps verfügen über gezielte Berechtigungen, mit denen sie nur den Zugriff auf das anfordern können, was sie benötigen. OAuth-Apps können keine präzisen Berechtigungen verwenden.
GitHub-Apps unterliegen nicht den Anwendungsrichtlinien der Organisation. Eine GitHub-App hat nur Zugriff auf die Repositorys, die ein Organisationsbesitzer gewährt hat. Wenn eine Anwendungsrichtlinie einer Organisation aktiv ist, kann die Installation einer OAuth-App nur durch einen Organisationsbesitzer autorisiert werden. Wenn die OAuth-App installiert ist, erhält sie Zugriff auf alles, was für das Token sichtbar ist, über das der Organisationsbesitzer innerhalb der genehmigten Organisation verfügt.
Die Ratenbegrenzung kann sowohl auf Ebene der GitHub-Apps (für alle Installationen) als auch auf Ebene der einzelnen Installationen erhöht werden. Die Ratenbegrenzung wird pro OAuth-App erweitert. Jedes Token, das der jeweiligen OAuth-App zugewiesen wird, verfügt über das erhöhte Limit.
GitHub-Apps können sich im Namen des Benutzers authentifizieren, was als Benutzer-zu-Server-Anforderungen bezeichnet wird. Der Autorisierungsflow entspricht dem Autorisierungsflow bei OAuth-Apps. Benutzer-zu-Server-Token können ablaufen und mit einem Aktualisierungstoken verlängert werden. Mit dem bei OAuth-Apps verwendeten Autorisierungsflow werden OAuth-Apps im Namen von Benutzer*innen autorisiert. Dabei handelt es sich um denselben Flow wie bei der Benutzer-zu-Server-Autorisierung von GitHub-Apps.
GitHub-Apps fordern die Berechtigung für Repositoryinhalte an und verwenden Ihr Installationstoken für die Authentifizierung über HTTP-basierten Git-Zugriff. OAuth-Apps fordern über die API den Geltungsbereich für write:public_key an und erstellen einen Bereitstellungsschlüssel. Diesen Schlüssel können Sie dann zum Ausführen von Git-Befehlen verwenden.

Anwendungszugriff und Berechtigungen

Bevor Sie einer App Zugriff auf ein GitHub-Repository gewähren, sehen Sie sich die angeforderten Berechtigungen genau an. Manche Apps sind vertrauenswürdig, andere erscheinen verdächtig. Erteilen Sie einer App nur diejenigen Berechtigungen, die Ihnen geläufig sind und die Sie auch wirklich erteilen möchten.

Die Entscheidung, ob eine GitHub-App oder eine OAuth-App verwendet werden soll, kann davon abhängen, auf welche Ebene die App zugreifen soll. Im Allgemeinen sollten Sie Ihr Team dazu ermutigen, zum Erledigen von Aufgaben das Tool mit dem kleinsten Geltungsbereich zu verwenden. Eine OAuth-App hat Zugriff auf alle Ressourcen eines Benutzers oder Organisationsbesitzers.

  • OAuth-Apps können über den Zugriff zum Lesen oder Schreiben für Ihre GitHub-Daten verfügen.
  • Sie können einer GitHub-App Zugriff auf ein Konto gewähren, ohne dass sie Zugriff auf ein anderes Konto erhält.

Anwendungssicherheit

Wenn in Ihrer Anwendung ein Sicherheitsrisiko gefunden wird, sollte es eine Priorität und Teil Ihrer Sicherheitsrichtlinien sein, die Benutzer*innen Ihres Projekts darüber zu informieren. Eine schnelle Benachrichtigung über ein Sicherheitsproblem entscheidet darüber, ob Benutzer*innen ein kompromittiertes Token widerrufen können oder ob vertrauliche Daten verfügbar gemacht werden. Token sind zwar deutlich sicherer als Kennwörter, aber die Sicherheit kann dennoch gefährdet sein, und es ist wichtig, dass Ihre Organisation darauf vorbereitet ist.

Neben einer Datei „README.md“ sollten Sie eine Datei „SECURITY.md“ in Ihre Repositorys aufnehmen. Die SECURITY.md-Datei enthält sicherheitsrelevante Informationen für das Repository. Die Datei sollte die Sicherheitskontakte, Ihre Organisationsrichtlinien und eine ausführliche Beschreibung enthalten, wie zu reagieren ist, wenn ein Sicherheitsrisiko entdeckt wird.

Reagieren auf Ereignisse

GitHub-Apps verhalten sich grundsätzlich passiv. Sie warten auf ein Ereignis, auf das sie dann (in der Regel über die GitHub-API) reagieren. Für die Überwachung von Ereignissen in GitHub gibt es zwei Möglichkeiten: Webhooks und Abrufe.

Hinweis

GitHub-Apps sind nicht auf die Verwendung von GitHub-Daten beschränkt. Sie können auch auf Ereignisse anderer Quellen warten oder Aktionen zur Aktualisierung anderer Dienste ausführen.

Verwenden von GitHub-Webhooks

Webhooks sind die bevorzugte Methode zur Behandlung von Ereignissen. Sobald in GitHub im Bereich eines Webhooks ein Ereignis auftritt, wird er sofort ausgelöst. Die App wird über Pushbenachrichtigungen von Webhooks informiert und kann die Ereignisse in Echtzeit überwachen und verarbeiten. Webhooks können in den Repositoryeinstellungen konfiguriert werden, wie etwa der Ereignistyp, die Authentifizierung und die Art der Übermittlung der HTTP-Benachrichtigungen.

Verwenden von Abfragen

In manchen Fällen sind Webhooks keine Option. Möglicherweise muss sich Ihre App hinter einer Unternehmensfirewall befinden, sodass GitHub nicht direkt auf sie zugreifen kann. Dann besteht eine Alternative darin, die nachverfolgten Daten mithilfe der GitHub-API abzufragen.

Weiterleiten von Webhooks

Eine Alternative zum Abrufen von Apps hinter einer Firewall stellen Weiterleitungsdienste für Webhooks wie smee.io dar. Dabei abonniert der öffentliche Dienst den Webhook des Repositorys und leitet eingehende Daten dann an den Clientdienst hinter der Firewall weiter. Die App wird über Pushbenachrichtigungen auf die gleiche Weise wie durch die Originalquelle informiert.