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.anchorLabelEn GitHub Action kjoerer automatisk 1. januar og 1. juni (hver ~5 maaneder, 1 maaned foer utloep):
.github/workflows/rotate-apple-secret.ymlJobben:
- Henter .p8-signerings-noekkel fra Doppler (
APPLE_AUTH_KEY_P8) - Genererer ny JWT med 180-dagers gyldighet
- Oppdaterer staging foerst og verifiserer
- Oppdaterer production kun etter staging-verifisering
- Oppdaterer Doppler dev (for lokal utvikling)
Sikkerhetshierarki
heading.anchorLabelGenerer 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.anchorLabelVia GitHub Actions (anbefalt)
heading.anchorLabel- Gaa til GitHub Actions → Rotate Apple Auth Secret
- Klikk Run workflow
- Valgfritt: kryss av “Preview only” for dry run
- Verifiser at jobben er groenn
Via terminal
heading.anchorLabel# Dry run (ingen endringer)./scripts/rotate-apple-secret.sh --dry-run
# Faktisk rotasjon (oppdaterer alle miljoeer)./scripts/rotate-apple-secret.shScriptet henter .p8-noekkel fra Doppler automatisk. Alternativt fra ~/Downloads/AuthKey_3ZNPSK2892.p8.
Feilscenarier og rollback
heading.anchorLabel| Scenario | Konsekvens | Handling |
|---|---|---|
| CI-jobb feiler | Gammel secret er fortsatt gyldig | Fiks feil og kjoer manuelt |
| Staging oppdatert, production feilet | Begge har gyldige secrets (gammel prd, ny stg) | Kjoer scriptet paa nytt |
| Alle oppdatert, men ny secret er ugyldig | Innlogging feiler | Se “Noedprosedyre” under |
| Scheduled job glemmes/deaktiveres | Secret utloeper stille | Sett opp ekstern varsling |
Noedprosedyre (auth er nede)
heading.anchorLabelHvis Apple Sign-In har sluttet aa fungere:
# 1. Sjekk naavaerende utloepsdatodoppler 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,datetimeexp = 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 appenHvis scriptet ogsaa feiler (f.eks. .p8-noekkel mangler):
# Manuell noed-rotasjon via Supabase Dashboard:# 1. Generer secret lokalt med .p8-filennode 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 SaveAvhengigheter
heading.anchorLabel| Komponent | Plassering | Formaal |
|---|---|---|
.p8 signing key | Doppler prd: APPLE_AUTH_KEY_P8 | Signerer JWT. Utloeper aldri. |
.p8 backup | ~/Downloads/AuthKey_3ZNPSK2892.p8 | Lokal backup for noedssituasjoner |
| Generator-script | scripts/generate-apple-secret.js | Lager JWT fra .p8 |
| Rotasjons-script | scripts/rotate-apple-secret.sh | Oppdaterer alle miljoeer |
| GitHub Action | .github/workflows/rotate-apple-secret.yml | Automatisk kjoering |
| Supabase API token | Doppler prd: SUPABASE_ACCESS_TOKEN | Oppdaterer hosted Supabase |
Tidslinje
heading.anchorLabel| Dato | Hendelse |
|---|---|
| 2026-03-24 | Foerste secret generert (180d gyldighet) |
| 2026-09-20 | Foerste secret utloeper |
| 2026-06-01 | Automatisk rotasjon (scheduled) |
| Hver 1. jan + 1. jun | Automatisk rotasjon fremover |
Monitorering
heading.anchorLabelEn GitHub Action kjoerer hver mandag og sjekker utloepsdato paa tvers av alle miljoeer:
.github/workflows/apple-secret-check.yml| Dager igjen | Nivaa | Handling |
|---|---|---|
| > 60 | ✅ OK | Ingen |
| 31–60 | 🟡 Warning | Scheduled rotasjon haandterer dette |
| 1–30 | 🔴 Critical | Workflow feiler — roter umiddelbart |
| 0 | 🚨 Expired | Auth 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