Impulse AI Docs
Intern dokumentasjon
skipLink.label

Apple Auth Secret Rotation

Apple krever en JWT-basert “client secret” for Sign in with Apple. Denne utloeper hver 180 dager. Hvis den utloeper, kan ingen brukere logge inn — hverken nye eller eksisterende som maa re-autentisere.

Automatisk rotasjon

heading.anchorLabel

En GitHub Action kjoerer automatisk 1. januar og 1. juni (hver ~5 maaneder, 1 maaned foer utloep):

.github/workflows/rotate-apple-secret.yml

Jobben:

  1. Henter .p8-signerings-noekkel fra Doppler (APPLE_AUTH_KEY_P8)
  2. Genererer ny JWT med 180-dagers gyldighet
  3. Oppdaterer staging foerst og verifiserer
  4. Oppdaterer production kun etter staging-verifisering
  5. Oppdaterer Doppler dev (for lokal utvikling)

Sikkerhetshierarki

heading.anchorLabel
Generer ny secret
→ Oppdater staging
→ Verifiser staging (enabled + client_id + secret satt)
→ Oppdater production (kun etter staging OK)
→ Oppdater Doppler dev (lavest prioritet)

Hvis noe feiler underveis, stopper scriptet. Gammel secret forblir gyldig til sin originale utloepsdato.

Manuell rotasjon

heading.anchorLabel

Via GitHub Actions (anbefalt)

heading.anchorLabel
  1. Gaa til GitHub Actions → Rotate Apple Auth Secret
  2. Klikk Run workflow
  3. Valgfritt: kryss av “Preview only” for dry run
  4. Verifiser at jobben er groenn
Terminal window
# Dry run (ingen endringer)
./scripts/rotate-apple-secret.sh --dry-run
# Faktisk rotasjon (oppdaterer alle miljoeer)
./scripts/rotate-apple-secret.sh

Scriptet henter .p8-noekkel fra Doppler automatisk. Alternativt fra ~/Downloads/AuthKey_3ZNPSK2892.p8.

Feilscenarier og rollback

heading.anchorLabel
ScenarioKonsekvensHandling
CI-jobb feilerGammel secret er fortsatt gyldigFiks feil og kjoer manuelt
Staging oppdatert, production feiletBegge har gyldige secrets (gammel prd, ny stg)Kjoer scriptet paa nytt
Alle oppdatert, men ny secret er ugyldigInnlogging feilerSe “Noedprosedyre” under
Scheduled job glemmes/deaktiveresSecret utloeper stilleSett opp ekstern varsling

Noedprosedyre (auth er nede)

heading.anchorLabel

Hvis Apple Sign-In har sluttet aa fungere:

Terminal window
# 1. Sjekk naavaerende utloepsdato
doppler secrets get SUPABASE_AUTH_EXTERNAL_APPLE_SECRET --project im --config dev --plain | \
cut -d. -f2 | base64 -d 2>/dev/null | python3 -c "
import json,sys,datetime
exp = json.load(sys.stdin)['exp']
print(f'Expires: {datetime.datetime.fromtimestamp(exp)}')"
# 2. Regenerer og deploy umiddelbart
./scripts/rotate-apple-secret.sh
# 3. Verifiser i Supabase Dashboard
# Production: https://supabase.com/dashboard/project/jksqfeutntcvukrisrno/auth/providers
# Staging: https://supabase.com/dashboard/project/conxpuqktkeiphnnpfiv/auth/providers
# 4. Test innlogging i appen

Hvis scriptet ogsaa feiler (f.eks. .p8-noekkel mangler):

Terminal window
# Manuell noed-rotasjon via Supabase Dashboard:
# 1. Generer secret lokalt med .p8-filen
node scripts/generate-apple-secret.js \
--key-file ~/Downloads/AuthKey_3ZNPSK2892.p8 \
--key-id 3ZNPSK2892
# 2. Kopier output
# 3. Gaa til Supabase Dashboard → Auth → Providers → Apple → Secret Key
# 4. Lim inn og klikk Save

Avhengigheter

heading.anchorLabel
KomponentPlasseringFormaal
.p8 signing keyDoppler prd: APPLE_AUTH_KEY_P8Signerer JWT. Utloeper aldri.
.p8 backup~/Downloads/AuthKey_3ZNPSK2892.p8Lokal backup for noedssituasjoner
Generator-scriptscripts/generate-apple-secret.jsLager JWT fra .p8
Rotasjons-scriptscripts/rotate-apple-secret.shOppdaterer alle miljoeer
GitHub Action.github/workflows/rotate-apple-secret.ymlAutomatisk kjoering
Supabase API tokenDoppler prd: SUPABASE_ACCESS_TOKENOppdaterer hosted Supabase
DatoHendelse
2026-03-24Foerste secret generert (180d gyldighet)
2026-09-20Foerste secret utloeper
2026-06-01Automatisk rotasjon (scheduled)
Hver 1. jan + 1. junAutomatisk rotasjon fremover

En GitHub Action kjoerer hver mandag og sjekker utloepsdato paa tvers av alle miljoeer:

.github/workflows/apple-secret-check.yml
Dager igjenNivaaHandling
> 60✅ OKIngen
31–60🟡 WarningScheduled rotasjon haandterer dette
1–30🔴 CriticalWorkflow feiler — roter umiddelbart
0🚨 ExpiredAuth er nede — noedprosedyre

Health check verifiserer alle tre miljoeer (dev, stg, prd) og feiler hvis production er kritisk eller utloept.

Kjoer manuelt: GitHub Actions → Apple Auth Secret Health Check