FixVibe

// docs / baas security / auth0 hardening

Auth0-beveiligingschecklist: 22 punten

Auth0 is een identity-as-a-service-platform met een enorm oppervlak β€” applicaties, API's (resource-servers), tenants, acties, regels (legacy), connecties en grants. Een verkeerde configuratie van een ervan is een auth-bypass. Deze checklist is een audit met 22 punten over applicaties, callback- / logout-allowlists, tokens en refresh-rotatie, aangepaste acties, RBAC, anomaliedetectie en doorlopende monitoring. Elk item is verifieerbaar in het Auth0-dashboard in minder dan 10 minuten.

Voor de equivalente checklist op Clerk, zie Clerk-beveiligingschecklist. Voor achtergrond over waarom identity-laag-misconfiguraties blinde vlekken zijn voor AI-tools, zie Waarom AI-codeertools beveiligingsgaten achterlaten.

Applicatietype en grant-typen

Het applicatietype en de ingeschakelde grant-typen zijn de instellingen met de grootste impact in Auth0. Het verkeerd doen opent aanvalsklassen die geen enkele hoeveelheid frontend-code zal sluiten.

  1. Gebruik Applicatietype = Single Page Application voor alleen-browser-apps en Regular Web Application voor server-rendered apps. Het verkeerde type staat de verkeerde grant-typen toe β€” bijv. een Regular Web App met de SPA-grant maakt PKCE-loze Implicit-flow mogelijk, die tokens lekt via URL-fragmenten.
  2. Schakel het Implicit-grant-type uit op elke applicatie. Dashboard β†’ Applicatie β†’ Geavanceerde instellingen β†’ Grant-typen β†’ vink Implicit uit. Implicit-flow retourneert tokens in URL-fragmenten, waar ze worden gelogd in browsergeschiedenis en analytics. Gebruik Authorization Code met PKCE in plaats daarvan.
  3. Schakel Password-grant uit tenzij je een gedocumenteerde behoefte hebt. Resource Owner Password Credentials (ROPC)-grant vereist dat je gebruikerswachtwoorden zelf afhandelt β€” wat het meeste verslaat waarvoor je Auth0 hebt gekocht. Schakel het uit tenzij je een legacy-systeem integreert.
  4. Schakel Authorization Code met PKCE in op elke openbare client. Dashboard β†’ Geavanceerde instellingen β†’ OAuth β†’ JsonWebToken-handtekeningsalgoritme = RS256, OIDC-conform = ingeschakeld. PKCE is vereist voor mobiele apps en SPA's om code-onderschepping te voorkomen.

Callback- en logout-URL-allowlists

Open redirects op het OAuth-callbackpad zijn een token-diefstal-primitief. De allowlist van Auth0 is je enige verdediging.

  1. Stel Toegestane Callback-URL's in op je exacte productie-callbackpad β€” geen wildcards. https://yourapp.com/callback, niet https://yourapp.com/*. Wildcard-callbacks laten aanvallers tokens omleiden naar willekeurige subpaden op je domein.
  2. Stel Toegestane Logout-URL's in op een eindige lijst. Dezelfde regel: alleen expliciete URL's. Een open logout-redirect laat aanvallers phishing-pagina's maken die eruit zien als je post-logout-status.
  3. Stel Toegestane Web Origins in op alleen je productie-origin. Gebruikt voor stille authenticatie (tokenvernieuwing via verborgen iframe). Een wildcard-origin laat aanvallerspagina's stille auth uitvoeren tegen je tenant.
  4. Stel Toegestane CORS-origins in voor de API-endpoints, niet de applicatie. Tenant-instellingen β†’ Geavanceerd β†’ Toegestane CORS-origins. Standaard is leeg (beperkt); voeg alleen expliciete origins toe die je controleert.

Tokens en refresh-rotatie

Tokenlevensduur, refresh-rotatie en handtekeningsalgoritme bepalen de blast radius van elke token-lek.

  1. Schakel Refresh Token Rotation in. Applicatie β†’ Refresh Token-instellingen β†’ Rotatie. Elke refresh geeft een nieuw refresh-token uit en maakt het oude ongeldig. Gecombineerd met absolute vervaltijd bevat dit token-diefstal.
  2. Stel Refresh Token Reuse Interval in op 0 (of zo laag als je replay-tolerantie toestaat). Het reuse-interval laat een token tweemaal in hetzelfde venster worden gebruikt β€” schakel het uit tenzij je een specifieke reden hebt om het te houden.
  3. Stel Absolute Refresh Token-vervaltijd in op 14-30 dagen, niet oneindig. Applicatie β†’ Refresh Token-vervaltijd β†’ Absolute vervaltijd. Auth0 staat standaard op alleen Inactiviteit, wat betekent dat een inactieve sessie jaren kan voortduren.
  4. Stel JWT-handtekeningsalgoritme in op RS256. Applicatie β†’ Geavanceerd β†’ OAuth β†’ JsonWebToken-handtekeningsalgoritme. RS256 gebruikt asymmetrische ondertekening, zodat de client geen tokens kan vervalsen. Gebruik nooit HS256 voor client-gerichte applicaties.
  5. Verifieer aud- en iss-claims op elke JWT die je API ontvangt. Gebruik de officiΓ«le Auth0-SDK aan de serverzijde β€” het verifieert deze automatisch. Handgemaakte JWT-parsing slaat meestal audience-validatie over, wat een auth-bypass is.

Acties en aangepaste code

Auth0 Actions (en legacy Rules) draaien server-side bij login en andere levenscyclusgebeurtenissen. Ze hebben toegang tot de hele aanvraagcontext. Onveilige code hier is een tenant-brede kwetsbaarheid.

  1. Log nooit event.user of event.transaction als een heel object. Deze bevatten e-mailadressen, IP-adressen en andere PII. Gebruik alleen veld-niveau-logging en log alleen wat je nodig hebt.
  2. Gebruik de geheimen-opslag voor elke API-sleutel of webhook-URL. Acties β†’ Bewerken β†’ Geheimen. Inline nooit een API-sleutel als een stringliteraal in actiecode β€” de code is zichtbaar voor iedereen met Action-editor-toegang op de tenant.
  3. Valideer invoer voordat je ze persisteert als user_metadata of app_metadata. Een self-service-actie die event.body.name naar user.user_metadata.display_name schrijft, is een stored-XSS-vector als je frontend dat veld rendert zonder te escapen.

RBAC en resource-servers

Als je Auth0 RBAC gebruikt, is de rol-naar-permissie-mapping je autorisatielaag. Doe het verkeerd en elke geauthenticeerde gebruiker kan admin-endpoints raken.

  1. Definieer Resource-servers (API's) expliciet in het Auth0-dashboard, niet on-the-fly. Elke API heeft een identifier (de audience), scopes en handtekeninginstellingen. Zonder een geregistreerde API worden alle tokens uitgegeven voor de impliciete "Auth0 Management API" β€” verkeerde audience.
  2. Configureer Permissies per API en vereis ze in je code met de scope-claim. Controleer geen rol-lidmaatschap in je applicatielogica; controleer scopes in het access-token. Scopes zijn het OAuth-native autorisatiemechanisme.
  3. Test dat een geauthenticeerde gebruiker zonder de vereiste rol / scope geprivilegieerde endpoints niet kan raken. Log in als een gewone gebruiker, probeer POST /api/admin/users/delete aan te roepen. Antwoord moet 403 zijn.

Anomaliedetectie en tenant-logs

Auth0 zendt hoge-signaal-gebeurtenissen uit. Stel ze in om je team te alarmeren, niet om gewoon in een logbuffer te zitten.

  1. Schakel Aanvalsbescherming in: Bot Detection, Brute Force, Suspicious IP Throttling. Dashboard β†’ Beveiliging β†’ Aanvalsbescherming. Elk staat standaard uit op gratis tiers; zet ze allemaal aan voor productie.
  2. Stream tenant-logs naar een SIEM of je applicatielogs. Dashboard β†’ Monitoring β†’ Streams. Auth0 bewaart logs 30 dagen op de meeste plannen; langetermijnbewaring vereist een stream naar je eigen systeem.
  3. Alert bij fcoa (mislukte cross-origin auth) en fp (mislukte login) pieken. Een burst van deze in een kort venster is credential-stuffing. Route naar je on-call-kanaal.

Volgende stappen

Voer een FixVibe-scan uit tegen je productie-URL β€” de baas.clerk-auth0-check markeert Auth0 client-secrets gebundeld in JavaScript en andere identity-provider-blootstellingsklassen. Voor de equivalent op Clerk, zie Clerk-beveiligingschecklist. Voor het paraplu-overzicht over BaaS-providers, lees BaaS-misconfiguratiescanner.

// scan je baas-oppervlak

Vind de open tabel voordat iemand anders dat doet.

Voer een productie-URL in. FixVibe somt de BaaS-providers op waarmee je app communiceert, fingerprint hun openbare endpoints en rapporteert wat een niet-geauthenticeerde client kan lezen of schrijven. Gratis, geen installatie, geen kaart.

  • Gratis tier β€” 3 scans / maand, geen kaart bij aanmelden.
  • Passieve BaaS-fingerprinting β€” geen domeinverificatie nodig.
  • Supabase, Firebase, Clerk, Auth0, Appwrite en meer.
  • AI-fixprompts bij elke bevinding β€” plak terug in Cursor / Claude Code.
Auth0-beveiligingschecklist: 22 punten β€” Docs Β· FixVibe