Hoppa till innehåll

Skapa GitHub-appen

Den här guiden visar hur du ger din server en egen GitHub-identitet. Det tar ungefär två minuter, bara serverägaren gör det, och det behöver bara göras en gång per server.

För att ansluta ditt eget konto efteråt, se Konfigurera GitHub-integration.

En registrering leder till två olika uppgifter, och appen är det som gör båda ärliga:

Uppgift Vad som svarar på den Varför det spelar roll
En person loggar in Appens klient-ID, via enhetsflödet Du får en inloggningsuppgift som är din, på servern, på varje enhet — utan token att klistra in eller rotera
Servern agerar Appens ID + privata nyckel → installationstoken Webhooks, PR-pollning och ärendesynkronisering slutar bero på att en människas token fortfarande är giltig

Lägg märke till vad som inte finns i tabellen: en klienthemlighet. GitHubs enhetsflöde autentiserar med enbart klient-ID:t — både begäran om enhetskoden och token-omröstningen — så det finns ingen hemlighet att hålla reda på för inloggningen.

Utan en egen app fungerar det första fortfarande via klient-ID:t som bygget levereras med; det andra faller tillbaka på serverägarens inloggningsuppgifter, så bakgrundsarbetet hänger på den som kom igång först.

  • Du är serverägare — åtgärderna providerApps.* är begränsade till den rollen, och kortet är osynligt för alla andra
  • Ett GitHub-konto, eller en organisation där du kan skapa appar
  • Inget som behöver vara åtkomligt utifrån: inloggningen är ett enhetsflöde, så servern behöver ingen inkommande port, tunnel, callback-URL eller domän
  1. Gå till github.com/settings/apps/new (för en organisation: Settings → Developer settings → GitHub Apps → New GitHub App)
  2. GitHub App name — vad som helst; Control Center (yourname) är bra. Det visas på commits och kommentarer som servern gör
  3. Homepage URL — vad som helst, t.ex. https://github.com/your-name
  4. Callback URL — lämna det tomt. Enhetsflödet har ingen
  5. Markera Enable Device Flow. Det här är den enda inställningen som inloggningen inte kan fungera utan
  6. Avmarkera Webhook → Active om du inte kopplar upp webhooks separat
  7. Under Repository permissions, bevilja minst:
    • Contents: Read and write
    • Metadata: Read-only (obligatoriskt)
    • Pull requests: Read and write
    • Issues: Read and write, om du använder GitHub Issues för ärenden, och för botens kommentarssökning i PR-samtal (se Prata med Control Center från en GitHub-PR)
    • Checks: Read-only, för CI-status på PR-sidan
  8. Under Where can this GitHub App be installed?, välj det som passar — ”Only on this account” passar för en personlig server
  9. Klicka på Create GitHub App

På appens sida, direkt efter att den har skapats:

Värde Var
App ID Fliken General, nära toppen
Client ID Fliken General, under ”Client secrets”
Private key Generate a private key — en .pem laddas ner

Den privata nyckelfilen laddas ner en gång och GitHub visar den aldrig igen. Behåll den tills du har klistrat in den; du kan alltid generera en ny.

En klienthemlighet är valfri och ger exakt en sak: om du låter ”Expire user authorization tokens” vara PÅ är det den som förnyar någons token i tysthet i stället för att be personen logga in igen var åttonde timme. Själva inloggningen använder den aldrig.

Det enklaste upplägget är att stänga AV den utgången, och då behövs ingen hemlighet någonstans. Om du behåller den på, generera en hemlighet och klistra in den i Inställningar → Server → Enkel inloggning (kortet Leverantörsappar) — det finns ingen miljövariabel för den, och ingen är inbakad i ett bygge, så den stannar på din server.

En app som är registrerad men inte installerad kan autentisera personer och läsa ingenting.

  1. På appens sida, öppna Install App
  2. Installera den på ditt konto eller din organisation
  3. Välj All repositories, eller välj de arkiv som servern ska se
  1. Gå till Inställningar → Server → Enkel inloggning och rulla till kortet Leverantörsappar
  2. I blocket GitHub, ange varje fält:
    • App-ID — det numeriska App ID:t
    • Privat nyckel — klistra in hela .pem-filen, inklusive raderna BEGIN och END
    • Klient-ID — från samma sida
    • Klienthemlighet — endast om du genererade en (för token-förnyelse)
  3. Klicka på Test

Nyckeln tolkas när den sparas, så en avkortad eller felformaterad inklistring avvisas direkt i stället för att misslyckas i en bakgrundsförfrågan timmar senare. Test går längre och frågar GitHub vilka konton appen är installerad på — ”sparad” och ”fungerar” är olika påståenden, och bara det andra betyder att något kommer att köras.

Kontrollpunkt: GitHub-blocket visar ”Servern kan agera som sig själv, och personer kan logga in”, och raden GitHub under Inställningar → Arbetsyta → Profil och identitet → Kodvärd erbjuder nu Logga in med GitHub.

För en huvudlös eller skriptad installation fyller servern varje fält från miljön första gången det inte har något sparat värde:

Terminalfönster
GITHUB_APP_ID=123456
GITHUB_APP_PRIVATE_KEY="$(cat control-center.private-key.pem)"
GITHUB_CLIENT_ID=Iv1.0123456789abcdef

Det finns inga kommandoradsflaggor för dessa — en hemlighet på en kommandorad kan läsas av varje process på värden via ps. Miljön är den enda platsen att konfigurera dem på, och den går före det som bygget levereras med. .env.template är den fullständiga listan.

För lokal utveckling har .env i arkivets rot samma värden och skrivbordsappen skickar dem till servern den startar. Lägg nyckeln på en rad där: ett .env-värde är en rad, och \n inom dubbla citattecken avkodas till en ny rad.

GITHUB_APP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nMIIEow…\n-----END RSA PRIVATE KEY-----"

GITHUB_APP_ID och GITHUB_APP_PRIVATE_KEY är samma namn som sandlådans tokenförmedlare redan läser, så en värd som har konfigurerat finkorniga agenttoken får inloggningsbanan på köpet. Fyllningen sker en gång per fält — efter det vinner det sparade värdet, så ändringar i Inställningar ångras inte av nästa omstart.

Linear har inget enhetsflöde, så dess inloggning är en tur via webbläsaren och den behöver en callback-URL — kortet Leverantörsappar visar exakt vilken du ska registrera.

  1. Skapa en OAuth-applikation på linear.app/settings/api/applications/new
  2. Ange Callback URL till den URL som kortet visar, ordagrant
  3. Klistra in Client ID och Client secret i Linear-blocket
  4. Lägg valfritt till en API-nyckel för arbetsytan — det är den inloggningsuppgift som servern använder för att synkronisera ärenden när ingen människa har bett om det

Inloggningsdialogen säger att leverantören inte returnerade någon enhetskod

Avsnitt med rubriken “Inloggningsdialogen säger att leverantören inte returnerade någon enhetskod”

Enable Device Flow är avstängt på appen. Slå på det under General och försök igen.

Test säger att inloggningsuppgifterna fungerar men att appen inte är installerad någonstans

Avsnitt med rubriken “Test säger att inloggningsuppgifterna fungerar men att appen inte är installerad någonstans”

Registrering och installation är två separata steg. Öppna Install App på appens sida och installera den.

Klistra in hela .pem-filen, inklusive raderna -----BEGIN och -----END. En ed25519- eller EC-nyckel kan inte användas — GitHub Apps signerar med RSA.

Appen är inte installerad på kontot som äger dem, eller så omfattar installationen andra arkiv. Medlemmens egen inloggning ger bara åtkomst till det appen får se.