Αποκωδικοποιητής JWT
Επικολλήστε ένα JSON Web Token για να δείτε την κεφαλίδα και το payload του, καθώς και αν έχει λήξει.
Αυτό αποκωδικοποιεί μόνο το token — δεν επαληθεύει την υπογραφή. Μην επικολλάτε ποτέ ένα token σε εργαλείο που ζητά επίσης το μυστικό κλειδί του.
Τρία τμήματα, ένας ειλικρινής περιορισμός
Ένα JWT είναι base64url(κεφαλίδα).base64url(payload).υπογραφή.
Αυτό το εργαλείο χωρίζει την είσοδό σας στις τελείες, μετατρέπει
καθένα από τα δύο πρώτα τμήματα από base64url πίσω σε τυπικό
base64 (αντικαθιστώντας τα -/_ ξανά με +// και αποκαθιστώντας το padding που
περιμένει η atob()), το αποκωδικοποιεί σε κείμενο UTF-8 και το
αναλύει ως JSON. Το τρίτο τμήμα — η υπογραφή — εμφανίζεται
ακριβώς όπως είναι γραμμένο, επειδή ο έλεγχός του απαιτεί το
μυστικό ή δημόσιο κλειδί του εκδότη, το οποίο δεν έχει κανέναν
λόγο να πληκτρολογείται σε έναν ιστότοπο.
Παράδειγμα
Token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Αποκωδικοποιείται στην κεφαλίδα:
{
"alg": "HS256",
"typ": "JWT"
} και στο payload:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Αυτό συγκεκριμένα το token δεν έχει claim exp,
οπότε δεν υπάρχει τίποτα να λήξει — επικολλήστε ένα token που
έχει, και η ένδειξη πάνω από τα πεδία σάς δείχνει με μια ματιά
αν εξακολουθεί να είναι έγκυρο.
Συχνές ερωτήσεις
Επαληθεύει αυτό ότι το token είναι γνήσιο;
Όχι — και κανένα εργαλείο πλευράς προγράμματος περιήγησης δεν μπορεί να το κάνει αυτό με ειλικρίνεια. Η επαλήθευση της υπογραφής ενός JWT απαιτεί το μυστικό κλειδί (για HS256) ή το δημόσιο κλειδί (για RS256/ES256) που το εξέδωσε, και αυτό το κλειδί ανήκει στον διακομιστή σας, ποτέ επικολλημένο σε έναν ιστότοπο. Αυτό το εργαλείο απλώς αποκωδικοποιεί την κεφαλίδα και το payload ώστε να διαβάσετε τι περιέχουν — ποτέ δεν ελέγχει αν η υπογραφή είναι έγκυρη. Αντιμετωπίστε ένα αποκωδικοποιημένο token ως «αναγνώσιμο», όχι ως «αξιόπιστο»: οποιοσδήποτε μπορεί να αποκωδικοποιήσει ένα JWT, και οποιοσδήποτε μπορεί να πλαστογραφήσει ένα χωρίς το κλειδί υπογραφής, οπότε η γνησιότητα πρέπει πάντα να επαληθεύεται στον διακομιστή.
Ποια είναι τα τρία μέρη ενός JWT;
Ένα JWT αποτελείται από τρία τμήματα κωδικοποιημένα σε base64url, ενωμένα με τελείες: κεφαλίδα.payload.υπογραφή. Η κεφαλίδα δηλώνει τον αλγόριθμο υπογραφής και τον τύπο του token (συνήθως {"alg":"HS256","typ":"JWT"}). Το payload μεταφέρει τα claims — τα πραγματικά δεδομένα, όπως ένα ID χρήστη, έναν εκδότη και μια ημερομηνία λήξης. Η υπογραφή υπολογίζεται από τον διακομιστή έκδοσης πάνω στην κεφαλίδα και το payload χρησιμοποιώντας ένα μυστικό που γνωρίζει μόνο αυτός, ώστε ένας διακομιστής παραλαβής να μπορεί να επιβεβαιώσει ότι το token δεν παραποιήθηκε — αλλά μόνο αν κατέχει κι εκείνος το ίδιο μυστικό.
Γιατί το base64url διαφέρει από το κανονικό base64;
Το κανονικό base64 χρησιμοποιεί τα +, / και = ως μέρος του αλφαβήτου του, και και τα τρία έχουν ειδική σημασία μέσα σε ένα URL (το + μπορεί να σημαίνει κενό, το / χωρίζει τμήματα διαδρομής, το = ξεκινά μια query string). Το base64url αντικαθιστά το + με -, το / με _, και αφαιρεί εντελώς το padding με =, ώστε ένα token να χωράει με ασφάλεια μέσα σε ένα URL ή μια επικεφαλίδα HTTP χωρίς να χρειάζεται κωδικοποίηση ποσοστού. Αυτό το εργαλείο μετατρέπει το base64url πίσω σε τυπικό base64 πριν την αποκωδικοποίηση, αφού αυτή είναι η μορφή που περιμένει η atob() του προγράμματος περιήγησης.
Ανεβαίνει το token μου κάπου;
Όχι. Ο διαχωρισμός της συμβολοσειράς και η αποκωδικοποίησή της γίνονται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας με απλή JavaScript — τίποτα δεν στέλνεται, δεν καταγράφεται και δεν αποθηκεύεται σε κανέναν διακομιστή. Παρόλα αυτά, τα JWT συχνά μεταφέρουν πραγματικά δεδομένα συνεδρίας: μην επικολλάτε ένα ενεργό production token σε κανένα εργαλείο, ούτε σε αυτό, αν δεν είστε σίγουροι ποιος άλλος μπορεί να βλέπει την οθόνη σας.