App Store Connect API-nøgle (.p8): opret og brug den
Af Mehdi Azizi
Udgivet , 10 min.
App Store Connect API-nøglen (.p8) kan kun downloades én gang. Rolle, Issuer ID, Key ID, tilbagekaldelse og brug med Expo, fastlane eller et script.
En App Store Connect API-nøgle lader et værktøj, som EAS, fastlane, RevenueCat eller dit eget script, arbejde på din konto uden din adgangskode og uden totrinsgodkendelse. Apple beholder den offentlige halvdel af nøglen, og du downloader den private halvdel, en .p8-fil, kun én gang. Med den fil, Issuer ID og Key ID signerer du tokens, der højst er gyldige i 20 minutter for de fleste forespørgsler.
Jeg udgiver mine iOS-apps, blandt andet TradaZen og Nolera, med Expo. En teamnøgle med rollen App Manager bruges af RevenueCat, af mine Expo-builds og af et kommandolinjeværktøj, der redigerer mine app-sider. Denne guide følger Apples, Expos og fastlanes sider, gennemlæst den 3. november 2026. Forveksl den ikke med nøgler til tjenester, der ligger i koden til en app: dem gennemgår jeg i hemmelig API-nøgle i en Expo-app.
Hvad en App Store Connect API-nøgle gør
Ifølge Apples dokumentation kræver App Store Connect API'et et JWT-token for hver forespørgsel. Du genererer det og signerer det med din private nøgle. Nøglen bruges kun til dette API: du kan ikke bruge den til andre af Apples tjenester.
Fordelen kan siges i én sætning: ingen person behøver at godkende login. Dit Apple-id støder ind i totrinsgodkendelsen, og det blokerer al automatisering. Guiden EAS Submit iOS viser, hvad det ændrer, når du sender en Expo-app.
Først: anmod om adgang til API'et
Den første nøgle kan ikke oprettes med det samme. App Store Connects hjælp er klar: Account Holder skal først anmode om adgang til API'et. Vedkommende åbner Users and Access, klikker på Integrations og derefter på Request Access. Apple behandler hver anmodning for sig.
Account Holder er den person, der har oprettet kontoen. Hvis du er nybegynder, er det dig: guiden Apple-udviklerkonto gennemgår tilmeldingen.
Teamnøgle eller individuel nøgle
Apple tilbyder to typer nøgler. Her er forskellene, hentet fra dokumentationen og App Store Connects hjælp:
| Kriterium | Teamnøgle | Individuel nøgle |
|---|---|---|
| Hvem kan generere den | Account Holder eller Admin | Næsten alle brugere |
| Tilgængelige apps | Alle, uden undtagelse | Brugerens egne |
| Rettigheder | Den valgte rolle | Brugerens rettigheder |
| Antal nøgler | Flere | Én aktiv pr. person |
| Certifikater og profiler | Ja, afhængigt af rollen | Nej |
| Salg, økonomi, notaryTool | Afhængigt af rollen | Nej |
| Felt i tokenet | iss = Issuer ID | sub = user |
"Næsten alle brugere" betyder ifølge Apple: Account Holder, Admin, App Manager, Customer Support, Developer og Marketing, medmindre en Admin eller Account Holder har frataget dem retten til at generere en individuel nøgle.
Til Expo eller fastlane skal du vælge en teamnøgle. En individuel nøgle har ikke adgang til provisioning-endpoints, dem der opretter certifikater og profiler. fastlanes dokumentation bekræfter det: teamnøgler er påkrævet til al adgang, der har med provisioning at gøre.
Hvilken rolle din nøgle skal have
En teamnøgle har adgang til alle kontoens apps, uanset rolle. Rollen bestemmer, hvad den må. Apple advarer om, at en Admin-nøgle kan oprette og slette brugere: giv den mindste rolle, der dækker dit behov. Rettighederne nedenfor kommer fra Apples rolletabel.
| Hvad nøglen bruges til | Roller, der tillader det |
|---|---|
| Sende builds | Admin, App Manager, Developer |
| Administrere TestFlight-builds | Admin, App Manager |
| Oprette certifikater og profiler | Admin, App Manager |
| Sende en app til review | Admin, App Manager |
| Importere produkter og priser (RevenueCat) | Mindst App Manager |
| Generere andre teamnøgler | Admin |
RevenueCat-linjen kommer fra deres dokumentation. Expos guide giver derimod nøglen rollen Admin. På mine apps er App Manager nok: EAS opretter distributionsprofilerne med den, og RevenueCat importerer produkterne.
Når nøglen først er genereret, kan du hverken ændre dens navn eller rolle. Vil du ændre noget, skal du tilbagekalde den og generere en ny.
Opret en teamnøgle, trin for trin
Du skal bruge en Admin- eller Account Holder-konto. Ifølge Apple:
- Åbn Users and Access, og derefter fanen Integrations.
- Vælg App Store Connect API i venstre kolonne, og derefter fanen Team Keys.
- Klik på Generate API Key, eller på knappen +.
- Giv nøglen et navn. Det er kun til dig og er ikke en del af nøglen. Navngiv den efter det værktøj, der skal bruge den.
- Vælg rollen under Access, og klik på Generate.
- Download den private nøgle med linket Download API Key.
Downloadlinket forsvinder, så snart du har downloadet filen, og Apple gemmer ingen kopi. Læg
.p8-filen et sikkert sted, før du lukker siden.
Notér derefter de to id'er. Ifølge Apples side om tokens vises Issuer ID øverst på siden Integrations, med en Copy-knap. Key ID står i listen over aktive nøgler: hold musen over den, så dukker Copy Key ID op. Issuer ID er det samme for alle kontoens teamnøgler. Key ID er unikt for hver nøgle.
For en individuel nøgle er det kortere: åbn din brugerprofil, rul ned til Individual API Key, og klik på Generate API Key. Også her kan du kun downloade én gang.
Opbevar .p8-filen
Apple beder dig behandle nøglen som en adgangskode: del den ikke, læg den ikke i et kode-repository, og byg den aldrig ind i koden til en app. Min rutine:
- En mappe uden for projektet, eller secrets-manageren i dit CI-værktøj.
- Nøglemappen i din
.gitignore, hvis filen skal ligge i projektet, mens du sender. - Stramme rettigheder. Et kommandolinjeværktøj til App Store Connect afviste min
.p8, så længe filen kunne læses af andre konti. Enchmod 600løste problemet. - Én nøgle pr. værktøj. Apple lader dig generere flere nøgler, med de roller du vil.
Det sidste punkt fulgte jeg ikke fra starten. Min App Manager-nøgle bruges både af RevenueCat, mine builds og mit værktøj til app-siderne. Hvis jeg skal tilbagekalde den, holder tre værktøjer op med at virke på én gang. Hvis jeg skulle gøre det om, ville jeg oprette én nøgle pr. værktøj, så jeg kan slå én fra uden at røre de andre.
Brug den med Expo
Tre måder at give nøglen til EAS:
- Lad EAS håndtere den.
eas credentials --platform ioskan oprette en nøgle og gemme den på Expos servere. Det er den nemmeste vej. - Angiv den i
eas.json.submit-profilen acceptererascApiKeyPath,ascApiKeyIssuerIdogascApiKeyId. Ifølge referencen for eas.json accepterer felterne miljøvariabler, som$ASC_API_KEY_PATH. - Send den via miljøet. EAS CLI-repositoriet dokumenterer
EXPO_ASC_API_KEY_PATH,EXPO_ASC_KEY_IDogEXPO_ASC_ISSUER_ID. Ved en individuel nøgle udelader du Issuer ID.
En begrænsning, du skal kende til for builds: Expo oplyser, at det officielle API ikke kan tilknytte en App Group, et Merchant ID eller en CloudKit-container. Så skal du logge ind med dit Apple-id lokalt. Det oplevede jeg på Nolera med app-gruppen til dens widget: nøglen aktiverede capability'en uden at tilknytte gruppen. Den tilknytning lavede jeg i Apples udviklerportal. Hvis synkroniseringen af capabilities går i stå, slår EXPO_NO_CAPABILITY_SYNC=1 den fra, og du aktiverer selv capability'en på app-id'et. Signering af builds er gennemgået i iOS-certifikat og provisioning profile.
Brug den med fastlane
fastlane læser nøglen fra en JSON-fil. Felterne key_id, issuer_id og key, indholdet af .p8-filen, er påkrævede. duration og in_house er valgfrie. Fiktive værdier:
{
"key_id": "XXXXXXXXXX",
"issuer_id": "your-issuer-id",
"key": "-----BEGIN PRIVATE KEY-----\nMIGT...\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
Derefter giver du filen til en action, for eksempel fastlane pilot distribute --api_key_path fastlane/cle.json. I en Fastfile tager action'en app_store_connect_api_key imod key_id, issuer_id og key_filepath. Sessionens varighed må højst være 1.200 sekunder, altså 20 minutter. Ikke alle actions understøtter den: fastlane oplyser for eksempel, at produce og pem ikke virker med en API-nøgle.
Brug den i dit eget script
Uden værktøj laver du selv tokenet. Apple fastlægger opskriften:
- Header:
algerES256,kider dit Key ID,typerJWT. - Indhold, teamnøgle:
iss, dit Issuer ID;iat, oprettelsestidspunktet;exp, udløbstidspunktet;aud, som erappstoreconnect-v1. - Indhold, individuel nøgle:
suberuseri stedet foriss. - Varighed: over 20 minutter afviser Apple tokenet for de fleste forespørgsler.
I Python med biblioteket PyJWT og dets kryptografiske afhængighed, installeret med pip install pyjwt[crypto] ifølge dokumentationen. I Mac'ens terminal skal du bruge anførselstegn: pip install "pyjwt[crypto]", ellers afviser zsh de firkantede parenteser.
import time
import jwt
KEY_ID = "XXXXXXXXXX"
ISSUER_ID = "your-issuer-id"
with open("AuthKey_XXXXXXXXXX.p8") as f:
private_key = f.read()
now = int(time.time())
token = jwt.encode(
{"iss": ISSUER_ID, "iat": now, "exp": now + 20 * 60, "aud": "appstoreconnect-v1"},
private_key,
algorithm="ES256",
headers={"kid": KEY_ID, "typ": "JWT"},
)
print(token)
Derefter sender du det i Authorization-headeren, som i Apples eksempel:
curl -H "Authorization: Bearer $TOKEN" "https://api.appstoreconnect.apple.com/v1/apps"
Jeg kørte scriptet den 3. november 2026 med en engangsnøgle genereret på min egen maskine: tokenets header og indhold stemmer med Apples side, og ES256-signaturen kan verificeres. Jeg sendte det ikke til Apples API med denne testnøgle, som ikke findes hos Apple. Genbrug det samme token, så længe det er gyldigt: Apple anbefaler det for bedre ydeevne.
Tilbagekald en nøgle
Tilbagekald en nøgle, så snart den er mistet eller kompromitteret, eller et værktøj ikke længere bruger den. Ifølge App Store Connects hjælp, med en Account Holder- eller Admin-konto:
- Åbn Users and Access, og derefter Integrations.
- Vælg Team Keys eller Individual Keys, og klik på Edit.
- Markér de nøgler, der skal tilbagekaldes, og vælg Revoke Key.
- Bekræft med Revoke.
En tilbagekaldt nøgle kan aldrig genaktiveres. Apple viser den i 30 dage under Revoked. Alle værktøjer, der brugte den, fejler derefter ved godkendelsen. Med Expo er beskeden "App Store Connect rejected the API authentication credentials". Den besked og de andre fejl ved afsendelse er forklaret i fejl ved afsendelse med EAS og hvordan du retter dem. Hvis nøglen ikke er kompromitteret, så gør den nye klar, før du slår den gamle fra. Hvis den er, beder Apple dig tilbagekalde den med det samme.
Til din egen individuelle nøgle: din profil, Individual API Key, og så Revoke.
Min tjekliste til .p8-nøglen
- Account Holder har anmodet om adgang til API'et.
- Nøglen er en teamnøgle, hvis den bruges til builds eller profiler.
- Dens rolle er den mindste, der dækker behovet, og dens navn fortæller, hvilket værktøj der bruger den.
.p8-filen ligger uden for repositoriet, med stramme rettigheder og en krypteret sikkerhedskopi.- Issuer ID og Key ID er noteret separat, uden filen.
- Hvert værktøj har sin egen nøgle, så du kan tilbagekalde én ad gangen.
Automatisér din udgivelse uden at efterlade din nøgle
Nøglen er kun én brik i forløbet. iOS & Android Kit tager udgangspunkt i startkoden til mine apps, abonnementer inklusive, og følger fire trin frem til App Store, i dit eget tempo. Hvis du kobler RevenueCat på med denne nøgle, finder du hele opsætningen i RevenueCat og in-app-abonnement på iOS.
Hvis du forbereder din første udgivelse, så tag din gratis diagnose: den fortæller dig, hvad der reelt blokerer dig, og sender dig min tjekliste mod afvisning fra Apple. Siden udgiv en app på App Store gennemgår hvert trin, fra app-siden til godkendelsen.
Ofte stillede spørgsmål
Hvordan opretter man en App Store Connect API-nøgle?
Account Holder anmoder først om adgang til API'et. Derefter åbner en Admin Users and Access, fanen Integrations, App Store Connect API, Team Keys. Vedkommende klikker på Generate API Key, vælger navn og rolle, genererer nøglen og downloader .p8-filen.
Kan man downloade en mistet .p8-nøgle igen?
Nej. Filen kan kun downloades én gang, og Apple gemmer ingen kopi. Tilbagekald den mistede nøgle, generér en ny, og opdatér alle værktøjer, der brugte den.
Hvor finder man Issuer ID og Key ID?
I App Store Connect, menuen Users and Access, fanen Integrations. Issuer ID vises øverst på siden. Key ID står i listen over aktive nøgler. En individuel nøgle bruger ikke Issuer ID.
Hvilken rolle skal en nøgle, som Expo bruger, have?
Expos guide giver rollen Admin. Ifølge Apples rolletabel er App Manager nok til at sende builds og oprette certifikater og profiler. Det er rollen på min nøgle, som jeg bruger til mine Expo-builds.
Kan man ændre rollen på en API-nøgle?
Nej. Apple tillader hverken at ændre navn eller rolle på en nøgle, efter den er oprettet. Tilbagekald den, og generér en ny med den rigtige rolle.
Udløber en App Store Connect API-nøgle?
Apples sider nævner ikke, at nøglen udløber, kun at den kan tilbagekaldes. Det er de tokens, der signeres med den, som udløber, efter højst 20 minutter for de fleste forespørgsler.

