// docs / baas security / auth0 hardening
Λίστα ελέγχου ασφάλειας Auth0: 22 σημεία
Το Auth0 είναι μια πλατφόρμα Identity-as-a-Service με τεράστια επιφάνεια — applications, APIs (resource servers), tenants, actions, rules (legacy), connections και grants. Η εσφαλμένη ρύθμιση οποιουδήποτε από αυτά είναι παράκαμψη auth. Αυτή η λίστα ελέγχου είναι έλεγχος 22 σημείων σε applications, allowlists callback / logout, tokens και refresh rotation, custom actions, RBAC, ανίχνευση ανωμαλιών και συνεχή παρακολούθηση. Κάθε στοιχείο είναι επαληθεύσιμο στο Auth0 Dashboard σε λιγότερο από 10 λεπτά.
Για την ισοδύναμη λίστα ελέγχου στο Clerk, δες Λίστα ελέγχου ασφάλειας Clerk. Για το υπόβαθρο γιατί οι εσφαλμένες ρυθμίσεις στο επίπεδο ταυτότητας είναι τυφλά σημεία των εργαλείων ΤΝ, δες Γιατί τα εργαλεία κωδικοποίησης με ΤΝ αφήνουν κενά ασφαλείας.
Τύπος application και τύποι grant
Ο τύπος application και οι ενεργοποιημένοι τύποι grant είναι οι ρυθμίσεις με τον μεγαλύτερο αντίκτυπο στο Auth0. Λάθος ρύθμιση ανοίγει κατηγορίες επιθέσεων που καμία ποσότητα κώδικα frontend δεν μπορεί να κλείσει.
- Χρησιμοποίησε Application Type = Single Page Application για εφαρμογές μόνο browser και Regular Web Application για εφαρμογές με server rendering. Ο λάθος τύπος επιτρέπει τους λάθος τύπους grant — π.χ. μια Regular Web App με το SPA grant ενεργοποιεί τη ροή Implicit χωρίς PKCE, που διαρρέει tokens μέσω URL fragments.
- Απενεργοποίησε τον τύπο Implicit grant σε κάθε application. Dashboard → Application → Advanced Settings → Grant Types → ξεμαρκάρε το Implicit. Η ροή Implicit επιστρέφει tokens σε URL fragments, όπου καταγράφονται στο ιστορικό browser και στα analytics. Χρησιμοποίησε Authorization Code με PKCE αντί για αυτό.
- Απενεργοποίησε το Password grant εκτός αν έχεις τεκμηριωμένη ανάγκη. Το grant Resource Owner Password Credentials (ROPC) απαιτεί να χειρίζεσαι ο ίδιος τους κωδικούς πρόσβασης χρηστών — αναιρώντας τα περισσότερα για τα οποία αγόρασες το Auth0. Απενεργοποίησέ το εκτός αν ενσωματώνεις legacy σύστημα.
- Ενεργοποίησε Authorization Code με PKCE σε κάθε δημόσιο client. Dashboard → Advanced Settings → OAuth → JsonWebToken Signature Algorithm = RS256, OIDC Conformant = ενεργοποιημένο. Το PKCE απαιτείται για mobile apps και SPAs για την αποτροπή υποκλοπής κωδικού.
Allowlists callback και logout URL
Οι ανοιχτές ανακατευθύνσεις στη διαδρομή OAuth callback είναι μια πρωτογενής λειτουργία κλοπής token. Η allowlist του Auth0 είναι η μόνη σου άμυνα.
- Όρισε Allowed Callback URLs στην ακριβή διαδρομή callback παραγωγής σου — χωρίς wildcards.
https://yourapp.com/callback, όχιhttps://yourapp.com/*. Τα callbacks με wildcard επιτρέπουν στους επιτιθέμενους να ανακατευθύνουν tokens σε αυθαίρετες υποδιαδρομές του τομέα σου. - Όρισε Allowed Logout URLs σε μια πεπερασμένη λίστα. Ίδιος κανόνας: μόνο ρητά URLs. Μια ανοιχτή ανακατεύθυνση logout επιτρέπει στους επιτιθέμενους να φτιάχνουν σελίδες phishing που μοιάζουν με την κατάστασή σου μετά το logout.
- Όρισε Allowed Web Origins μόνο στην origin παραγωγής σου. Χρησιμοποιείται για σιωπηλό authentication (ανανέωση token μέσω κρυφού iframe). Μια origin με wildcard επιτρέπει σε σελίδες επιτιθέμενων να εκτελούν σιωπηλό auth εναντίον του tenant σου.
- Όρισε Allowed CORS origins για τα endpoints API, όχι για το application. Tenant Settings → Advanced → Allowed CORS origins. Η προεπιλογή είναι άδεια (περιορισμένη)· πρόσθεσε μόνο ρητά origins που ελέγχεις.
Tokens και refresh rotation
Η διάρκεια ζωής token, το refresh rotation και ο αλγόριθμος υπογραφής αποφασίζουν το blast radius οποιασδήποτε διαρροής token.
- Ενεργοποίησε Refresh Token Rotation. Application → Refresh Token Settings → Rotation. Κάθε refresh εκδίδει ένα νέο refresh token και ακυρώνει το παλιό. Σε συνδυασμό με απόλυτη λήξη, αυτό περιορίζει την κλοπή token.
- Όρισε Refresh Token Reuse Interval στο 0 (ή όσο χαμηλά επιτρέπει η ανοχή replay σου). Το reuse interval επιτρέπει σε ένα token να χρησιμοποιηθεί δύο φορές στο ίδιο παράθυρο — απενεργοποίησέ το εκτός αν έχεις συγκεκριμένο λόγο να το κρατήσεις.
- Όρισε Absolute Refresh Token Expiry σε 14-30 ημέρες, όχι άπειρο. Application → Refresh Token Expiration → Absolute Expiration. Το Auth0 ορίζει προεπιλεγμένα μόνο Inactivity, που σημαίνει ότι μια αδρανής session μπορεί να παραμείνει για χρόνια.
- Όρισε JWT Signature Algorithm σε RS256. Application → Advanced → OAuth → JsonWebToken Signature Algorithm. Το RS256 χρησιμοποιεί ασύμμετρη υπογραφή ώστε ο client να μην μπορεί να πλαστογραφεί tokens. Ποτέ μη χρησιμοποιείς HS256 για applications που εκτίθενται στον client.
- Επαλήθευσε τα claims
audκαιissσε κάθε JWT που λαμβάνει το API σου. Χρησιμοποίησε το επίσημο Auth0 SDK στην πλευρά του server — τα επαληθεύει αυτόματα. Το χειροποίητο parsing JWT συνήθως παραλείπει την επικύρωση audience, που είναι παράκαμψη auth.
Actions και custom code
Τα Auth0 Actions (και τα legacy Rules) τρέχουν από την πλευρά του server κατά το login και άλλα συμβάντα κύκλου ζωής. Έχουν πρόσβαση σε ολόκληρο το context αιτήματος. Μη ασφαλής κώδικας εδώ είναι ευπάθεια ευρείας κλίμακας tenant.
- Ποτέ μην καταγράφεις το
event.userή τοevent.transactionως ολόκληρο αντικείμενο. Αυτά περιέχουν διευθύνσεις email, διευθύνσεις IP και άλλα PII. Χρησιμοποίησε αποκλειστικά καταγραφή σε επίπεδο πεδίου και κατάγραψε μόνο ό,τι χρειάζεσαι. - Χρησιμοποίησε τον secrets store για κάθε API key ή webhook URL. Actions → Edit → Secrets. Ποτέ μη γράφεις inline ένα API key ως literal string σε κώδικα action — ο κώδικας είναι ορατός σε όποιον έχει πρόσβαση επεξεργαστή Action στο tenant.
- Επικύρωσε τις εισόδους πριν τις διατηρήσεις ως user_metadata ή app_metadata. Μια self-service action που γράφει
event.body.nameστοuser.user_metadata.display_nameείναι διάνυσμα stored-XSS εάν το frontend σου αποδίδει αυτό το πεδίο χωρίς escape.
RBAC και resource servers
Εάν χρησιμοποιείς Auth0 RBAC, η αντιστοίχιση ρόλου-σε-δικαίωμα είναι το επίπεδο εξουσιοδότησής σου. Λάθος ρύθμιση και οποιοσδήποτε πιστοποιημένος χρήστης μπορεί να φτάσει σε admin endpoints.
- Όρισε ρητά τους Resource Servers (APIs) στο Auth0 Dashboard, όχι στο πόδι. Κάθε API έχει έναν identifier (το
audience), scopes και ρυθμίσεις υπογραφής. Χωρίς εγγεγραμμένο API, όλα τα tokens εκδίδονται για το σιωπηρό «Auth0 Management API» — λάθος audience. - Ρύθμισε Permissions ανά API και απαίτησέ τα στον κώδικά σου με το claim
scope. Μην ελέγχεις τη συμμετοχή σε ρόλο στη λογική της εφαρμογής σου· έλεγξε scopes στο access token. Τα scopes είναι ο OAuth-native μηχανισμός εξουσιοδότησης. - Δοκίμασε ότι ένας πιστοποιημένος χρήστης χωρίς τον απαιτούμενο ρόλο / scope δεν μπορεί να φτάσει σε προνομιακά endpoints. Συνδέσου ως κανονικός χρήστης, προσπάθησε να καλέσεις
POST /api/admin/users/delete. Η απάντηση πρέπει να είναι403.
Ανίχνευση ανωμαλιών και tenant logs
Το Auth0 εκπέμπει συμβάντα υψηλού σήματος. Ρύθμισέ τα ώστε να ειδοποιούν την ομάδα σου, όχι απλώς να κάθονται σε buffer logs.
- Ενεργοποίησε Attack Protection: Bot Detection, Brute Force, Suspicious IP Throttling. Dashboard → Security → Attack Protection. Κάθε ένα είναι προεπιλεγμένα off στα δωρεάν tiers· ενεργοποίησέ τα όλα για παραγωγή.
- Κάνε stream τα tenant logs σε SIEM ή στα logs της εφαρμογής σου. Dashboard → Monitoring → Streams. Το Auth0 διατηρεί logs για 30 ημέρες στα περισσότερα πλάνα· η μακροπρόθεσμη διατήρηση απαιτεί stream στο δικό σου σύστημα.
- Συναγερμός σε αυξήσεις
fcoa(failed cross-origin auth) καιfp(failed login). Μια ριπή αυτών σε σύντομο παράθυρο είναι credential stuffing. Δρομολόγησέ τα στο κανάλι on-call σου.
Επόμενα βήματα
Τρέξε μια σάρωση FixVibe εναντίον του URL παραγωγής σου — ο έλεγχος baas.clerk-auth0 επισημαίνει τα Auth0 client secrets που έχουν πακεταριστεί σε JavaScript και άλλες κατηγορίες έκθεσης παρόχου ταυτότητας. Για το ισοδύναμο στο Clerk, δες Λίστα ελέγχου ασφάλειας Clerk. Για τη συνολική εικόνα σε όλους τους παρόχους BaaS, διάβασε Scanner εσφαλμένων ρυθμίσεων BaaS.
