Vad är GitHub-appar?

Slutförd

Här går vi igenom vad GitHub Apps är, hur de fungerar och hur du kan använda dem för att förbättra dina arbetsflöden. Oavsett om du använder en lösning som skapats av någon annan eller utvecklar en så att den passar dina behov finns det alltid utrymme för att förbättra dina processer.

Utöka plattformen via GitHub-API:et

GitHub tillhandahåller ett robust API som gör det möjligt för utvecklare att göra nästan vad som helst på plattformen. Den exponeras via REST-slutpunkter, så det är enkelt att integrera från valfri plattform eller programmeringsspråk. API-åtkomsten står dock inte på egen hand. Utvecklare som vill dela sina funktioner med andra måste fortfarande paketera dem som en app och publicera dem innan någon kan använda dem.

Det finns flera faktorer att tänka på när du väljer mellan att införliva en OAuth-app eller GitHub-app i arbetsflödet. I det här avsnittet introducerar vi GitHub Apps och OAuth Apps, deras skillnader i användning och behörighet samt händelseprenumerationer.

Bild av en installationsikon och en godkänna-ikon för GitHub Apps och OAuth-appar.

När du anpassar ett GitHub-arbetsflöde har du flera tillgängliga funktioner, till exempel att skriva anpassade skript, skapa och auktorisera dina egna OAuth-appar eller installera GitHub-appar som är tillgängliga från GitHub Marketplace. I allmänhet kan du bäst använda skript för dessa engångsuppgifter. För åtgärder som behöver köras oftare kan du använda automatiseringen av OAuth- och GitHub Apps för att hjälpa dig och ditt team att spara tid och behålla den optimala säkerhetsnivån i dina arbetsflöden. Det finns många skillnader som påverkar hur du bestämmer dig för att använda en GitHub-app eller OAuth-app. Att förstå dessa skillnader i förväg kan minska vissa problem och omarbeta på vägen, och hjälpa dig att hitta det bästa programmet för ditt specifika användningsfall i arbetsflödet.

I slutet av det här avsnittet har du en god förståelse för skillnaderna mellan en GitHub-app och en OAuth-app, och du vet hur du bäst väljer en app för rätt situation.

Bevilja åtkomst och behörighet

Ett av de viktigaste övervägandena för att tillåta att en app får åtkomst till en GitHub-lagringsplats är de behörigheter som krävs för att fungera. Vissa appar är enkla att lita på, men andra kan vara misstänkta. Se alltid till att du är bekväm med de behörigheter som du beviljar en app.

Skärmbild av granskning av begärda behörigheter och lagringsplatsåtkomst.

Kommentar

Varje app använder en unik API-nyckel för att göra förfrågningar om data i din lagringsplats. När du auktoriserar åtkomst är det den nyckeln du auktoriserar. Du kan när som helst återkalla åtkomsten till en apps nyckel via dina lagringsinställningar.

OAuth-appar

OAuth-appar ger ett sätt att komma åt GitHub-data för en användares räkning. Eftersom den agerar för användarens räkning är det viktigt att observera att den använder en GitHub-licensierad plats. Du kan skapa och registrera en OAuth-app på ditt personliga konto eller på organisationsnivå om du har administrativ åtkomst. En OAuth-app som integreras med GitHub visar vilken typ av åtkomst till organisationen eller lagringsplatsen som krävs. Användare auktoriserar OAuth-appar, vilket ger appen möjlighet att fungera som den autentiserade användaren, till exempel att läsa eller ändra data. Den här metoden är i princip ett automatiserat sätt att läsa, skriva eller redigera GitHub-data som användare. Det är också viktigt att observera att auktoriseringen är begränsad till de resurser som är tillgängliga för användaren. Men OAuth-appen får också åtkomst till alla resurser som är tillgängliga för användaren.

Kommentar

Åtkomstnivån begränsas av tokenomfånget (användare, organisation, lagringsplats).

För organisationer med åtkomstbegränsningar för OAuth-appar kan administratören bevilja godkännande för att använda programmet. Med händelseprenumerationer svarar OAuth Apps på aktivitet när det händer.

GitHub Apps

GitHub Apps installeras däremot på ditt personliga konto, i organisationer som du äger eller på specifika lagringsplatser där du har administratörsåtkomst. GitHub Apps installeras och interagerar med GitHub som en tjänst, inte en enskild användare som med OAuth Apps. En fördel med GitHub Apps är att GitHub Apps, till skillnad från OAuth-appar, inte använder en GitHub-licensierad plats.

GitHub Apps får åtkomst till data för själva programmet via en privat nyckel som används för att signera en JWT-token (JSON-webbtoken). Eftersom de är installerade på specifika lagringsplatser kan användarna välja vilka lagringsplatser som appen kan komma åt, vilket begränsar mängden data som appen kan komma åt. Behörigheter definierar vilka resurser GitHub-appen kan komma åt via API:et. Till skillnad från OAuth-appar har GitHub Apps anpassningsbara behörigheter för lagringsplatsdata, problem och pull-begäranden. På så sätt kan du bevilja mer detaljerade behörigheter, vilket begränsar appens läs- och skrivbehörighet till de lagringsplatser som den har fått åtkomst till. Endast organisationsägare kan hantera inställningen för GitHub Apps i en organisation.

Du hittar och installerar GitHub Apps från GitHub Marketplace. Tänk på att vissa appar har ett verifierat märke när du söker efter GitHub-appar. Det här märket visar att appen ägs av en organisation som har verifierat ägarskapet för sin domän, bekräftat sina e-postadresser med GitHub Support och kräver tvåfaktorautentisering för organisationen.

Bild av ett verifierat märke för en GitHub-app.

  • En administratör kan bevilja behörigheter för lagringsplatsadministration, kontroller, lagringsplatsinnehåll, distributioner och problem (Administratörsändringarna kräver användargodkännande)
  • En administratör kan ge appen användarbehörighet för att blockera en annan användare, e-post, följare, GPG-nycklar, Git SSH-nycklar, stjärnmärka, titta (Administratörsändringarna kräver användargodkännande)
  • Händelseprenumerationer: Säkerhetsrådgivning, Check suite, Create, Deployment, Fork, Label, Member, Check in, Commit comment, Delete, Deployment status, Milestone, Membership, Organization (Administrator configures in the GH Apps UI and can be changed)

Välj mellan GitHub-appar och OAuth-appar

GitHub Apps är ett idealiskt sätt att integrera i arbetsflödet i vissa situationer, men det kan vara svårt för större organisationer att göra övergången från den traditionella användningen av OAuth-appar för automatisering. En säkerhetsprincipbegränsning kan till exempel också begränsa administratörens alternativ när de väljer att använda dessa verktyg.

Kommentar

Som systemadministratör bör du samarbeta med dina utvecklare för att hitta de bästa alternativen för automatisering genom att utnyttja dessa program samtidigt som du följer din säkerhetsprincip.

Här är några viktiga frågor att tänka på för att avgöra vilken app som är rätt lösning för din situation:

  • Vill jag att appen ska fungera som en användare?
  • Vad kommer hastighetsbegränsningen att behöva vara?
  • Vilken åtkomst vill jag att appen ska ha i organisationen och lagringsplatserna?
  • Följer den här appen vår säkerhetsprincip?

Här följer några viktiga egenskaper och skillnader att tänka på när du väljer mellan en GitHub-app eller en OAuth-app.

GitHub Apps OAuth-appar
Om du installerar en GitHub-app får appen åtkomst till ett användar- eller organisationskontos valda lagringsplatser. Auktorisering av en OAuth-app ger appen åtkomst till användarens tillgängliga resurser. till exempel lagringsplatser som de kan komma åt.
Installationsåtkomsttoken är begränsade till angivna lagringsplatser med de behörigheter som valts av appens skapare. En OAuth-åtkomsttoken begränsas via omfång.
En installationstoken identifierar appen som GitHub Apps-roboten. En åtkomsttoken identifierar appen som den användare som beviljade token till appen.
GitHub Apps har riktade behörigheter som gör att de endast kan begära åtkomst till det de behöver. OAuth-appar kan inte använda detaljerade behörigheter.
GitHub Apps omfattas inte av organisationens programprinciper. En GitHub-app har bara åtkomst till de lagringsplatser som en organisations ägare har beviljat. Om en princip för organisationsprogram är aktiv kan endast en organisationsägare auktorisera installationen av en OAuth-app. Om den installeras får OAuth-appen åtkomst till allt som är synligt för den token som organisationens ägare har inom den godkända organisationen.
Hastighetsgränshöjningar kan beviljas både på GitHub Apps-nivå (som påverkar alla installationer) och på enskild installationsnivå. Ökningar av hastighetsgränser beviljas per OAuth-app. Varje token som beviljas till OAuth-appen får den ökade gränsen.
GitHub Apps kan autentiseras åt användaren, vilket kallas användar-till-server-begäranden. Flödet som ska auktoriseras är detsamma som Auktoriseringsflödet för OAuth-appen. Användar-till-server-token kan upphöra att gälla och förnyas med en uppdateringstoken. OAuth-flödet som används av OAuth Apps auktoriserar en OAuth-app för användarens räkning. Det här är samma flöde som används i GitHub App-auktorisering från användare till server.
GitHub Apps ber om behörighet för lagringsplatsinnehåll och använder din installationstoken för att autentisera via HTTP-baserad Git. OAuth-appar ber write:public_key om omfång och Skapa en distributionsnyckel via API:et. Du kan sedan använda den nyckeln för att utföra Git-kommandon.

Programåtkomst och behörigheter

Ett av de viktigaste övervägandena för att tillåta att en app får åtkomst till en GitHub-lagringsplats är de behörigheter som krävs för att fungera. Vissa appar är enkla att lita på, men andra kan vara misstänkta. Se alltid till att du är bekväm med de behörigheter som du beviljar en app.

Beslutet att använda en GitHub-app eller OAuth-app kan bero på vilken åtkomstnivå du vill att appen ska komma åt. I allmänhet bör du uppmuntra ditt team att använda verktyget med det minsta omfånget för att utföra uppgiften. En OAuth-app har åtkomst till alla en användares eller organisationsägares resurser.

  • OAuth-appar kan ha läs- eller skrivåtkomst till dina GitHub-data
  • Du kan ge en GitHub-app åtkomst till ett konto utan att beviljas åtkomst till ett annat

Programsäkerhet

När du hittar en säkerhetsrisk i ditt program bör det vara en prioritet och inom din säkerhetsprincip att berätta för projektets användare. Att snabbt kommunicera ett säkerhetsproblem kan innebära skillnaden mellan att användarna kan återkalla en komprometterad token eller att känsliga data exponeras. Token är mycket säkrare än lösenord, men säkerheten kan fortfarande äventyras och det är viktigt att din organisation förbereds.

Förutom en README.md fil rekommenderar vi att du lägger till en SECURITY.md fil i dina lagringsplatser. Filen SECURITY.md visar säkerhetsrelaterad information för lagringsplatsen. Filen bör innehålla säkerhetskontakterna, organisationens principer och beskriva det svar du får när en säkerhetsrisk upptäcks.

Reagerar på händelser

GitHub-appar är utformade för att vara passiva. De väntar på att något ska hända och reagerar sedan, vanligtvis via GitHub-API:et. När du väntar på att händelser ska inträffa på GitHub finns det två metoder: webhooks och avsökning.

Kommentar

GitHub-appar är inte begränsade till att fungera med GitHub-data. Du kan enkelt vänta på händelser som sker från andra källor eller utföra åtgärder som uppdaterar andra tjänster.

Använda GitHub-webhooks

Webhooks är den bästa metoden för händelsehantering. När något händer i GitHub inom omfånget för en webhook uppmärksammas det omedelbart. Webhooks push-meddelanden som appen kan lyssna efter och bearbeta i realtid. Du kan konfigurera webhooks i dina lagringsinställningar, som typer av händelser, autentisering och hur HTTP-meddelanden levereras.

avsökning

Ibland är webhooks inte ett alternativ. Din app kan behöva finnas bakom en företagsbrandvägg där GitHub inte kan nå den direkt. I så fall är ett alternativ att söka efter de data du spårar med hjälp av GitHub-API:et.

Webhook-reläande

Ett alternativ för att avsöka appar bakom en brandvägg är att använda en vidarebefordranstjänst för webhooks, som smee.io. Med den här metoden prenumererar den offentliga tjänsten på lagringsplatsens webhook och vidarebefordrar sedan inkommande data till en klienttjänst som körs bakom brandväggen. Klienttjänsten skickar sedan meddelanden till appen som körs som om de kom från den ursprungliga källan.