← Όλα τα εργαλεία

Αποκωδικοποιητής JWT

Αποκωδικοποιήστε οποιοδήποτε JSON Web Token στον browser σας. Διαβάστε header, payload και claims ακαριαία και τοπικά. Η αποκωδικοποίηση δεν είναι επαλήθευση, τίποτα δεν φεύγει από τη συσκευή σας.
Header
Payload

Τι κάνει πραγματικά ένας JWT Decoder

Ένα JSON Web Token (JWT) μοιάζει με μια μακριά, αδιαφανή συμβολοσειρά τυχαίων χαρακτήρων, αλλά δεν είναι κρυπτογραφημένο και δεν είναι μυστικός κώδικας. Είναι ένα συμπαγές, ασφαλές για URL δοχείο που μεταφέρει δομημένα δεδομένα ανάμεσα σε δύο μέρη. Επικολλήστε ένα token στον αποκωδικοποιητή παραπάνω και εκείνος διασπά αυτή τη συμβολοσειρά και σας δείχνει το πραγματικό JSON μέσα — τα μεταδεδομένα, τις αξιώσεις (claims), για ποιον προορίζεται το token, και πότε λήγει. Όλα συμβαίνουν μέσα στο πρόγραμμα περιήγησής σας. Το token δεν ανεβαίνει, δεν καταγράφεται, ούτε στέλνεται πουθενά, κάτι που έχει μεγάλη σημασία όταν αυτό που εξετάζετε είναι ένα ζωντανό διαπιστευτήριο συνεδρίας.

Ένα JSON Web Token που διασπάται σε τρία φωτεινά τμήματα Base64url: header, payload και signature
Μία συμβολοσειρά με τελείες, τρία διακριτά μέρη: header, payload και signature.

Τρία μέρη, δύο τελείες

Κάθε καλά διαμορφωμένο JWT είναι τρεις συμβολοσειρές κωδικοποιημένες σε Base64url ενωμένες με τελείες: header.payload.signature. Αυτός ο μεμονωμένος χαρακτήρας τελείας είναι που λέει στους parsers πού τελειώνει ένα τμήμα και πού αρχίζει το επόμενο, και γι' αυτό ένα token με λάθος αριθμό τελειών απορρίπτεται πριν καν διαβαστεί οτιδήποτε άλλο.

Η header είναι ένα μικρό αντικείμενο JSON που περιγράφει το ίδιο το token. Σχεδόν πάντα περιέχει το typ (τον τύπο, συνήθως JWT) και το alg — τον αλγόριθμο υπογραφής, όπως HS256 (HMAC με SHA-256) ή RS256 (RSA με SHA-256). Η header λέει σε έναν επαληθευτή ακριβώς πώς παράχθηκε η υπογραφή.

Το payload είναι το μέρος για το οποίο νοιάζονται οι περισσότεροι. Είναι ένα άλλο αντικείμενο JSON που περιέχει τις αξιώσεις (claims) — δηλώσεις για τον χρήστη και το token. Η προδιαγραφή ταξινομεί τις αξιώσεις σε καταχωρημένες (τυπικές, δεσμευμένα ονόματα), δημόσιες, και ιδιωτικές (προσαρμοσμένα ονόματα που επινοείτε για τη δική σας εφαρμογή). Η αποκωδικοποίηση του payload είναι αυτό που αποκαλύπτει ποιος είναι συνδεδεμένος, τι ρόλο κατέχει, και πότε λήγει η συνεδρία του.

Η signature είναι η κρυπτογραφική σφραγίδα. Υπολογίζεται πάνω στην κωδικοποιημένη header και payload χρησιμοποιώντας τον αλγόριθμο από την header συν ένα μυστικό ή ιδιωτικό κλειδί. Επειδή καλύπτει και τα δύο άλλα τμήματα, οποιαδήποτε αλλαγή στην header ή στο payload — ακόμη και ενός χαρακτήρα — την ακυρώνει.

Οι αξιώσεις που θα δείτε συχνότερα

Οι καταχωρημένες αξιώσεις είναι σύντομα, τριγράμματα ονόματα καθορισμένα από το RFC 7519 ώστε διαφορετικά συστήματα να μπορούν να συνεργάζονται. Μερικές εμφανίζονται σχεδόν παντού:

  • ississuer: ποιος εξέδωσε το token (ο server ελέγχου ταυτότητας ή ο πάροχος ταυτότητάς σας).
  • subsubject: ο κύριος για τον οποίο αφορά το token, τυπικά ένα σταθερό ID χρήστη.
  • audaudience: ο παραλήπτης για τον οποίο προορίζεται το token. Ένα API θα πρέπει να απορρίπτει tokens των οποίων το audience δεν είναι το ίδιο.
  • expexpiration time: ένα Unix timestamp μετά το οποίο το token δεν πρέπει να γίνεται δεκτό.
  • iatissued at: το Unix timestamp όταν δημιουργήθηκε το token.

Μπορεί επίσης να συναντήσετε το nbf (not before) και το jti (ένα μοναδικό ID token). Τα timestamps είναι δευτερόλεπτα από το 1970 σε UTC, γι' αυτό ένας αποκωδικοποιητής που τα αποδίδει ως ευανάγνωστες από ανθρώπους ημερομηνίες σας γλιτώνει τη νοερή αριθμητική του ελέγχου αν ένα token έχει ήδη λήξει.

Η αποκωδικοποίηση δεν είναι επαλήθευση — αυτό είναι το σημείο που παγιδεύει τον κόσμο

Αυτή η διάκριση είναι το πιο σημαντικό πράγμα που πρέπει να καταλάβετε για τα JWT. Η αποκωδικοποίηση σημαίνει την ανάγνωση του περιεχομένου: δεν απαιτεί κλειδί και οποιοσδήποτε κατέχει το token μπορεί να το κάνει, γιατί το Base64url είναι κωδικοποίηση, όχι κρυπτογράφηση. Η επαλήθευση σημαίνει να αποδείξετε ότι το token είναι γνήσιο και δεν έχει παραποιηθεί — επαναϋπολογίζοντας την υπογραφή με το σωστό μυστικό ή δημόσιο κλειδί και επιβεβαιώνοντας ότι ταιριάζει.

Αυτό το εργαλείο αποκωδικοποιεί. Σας δείχνει τι λέει το token, όχι αν το token είναι αξιόπιστο. Ένα token θα μπορούσε να είναι πλαστογραφημένο, ληγμένο, ή επαναχρησιμοποιημένο και να αποκωδικοποιείται και πάλι σε τέλεια καθαρό JSON. Ποτέ μην παίρνετε μια απόφαση εξουσιοδότησης βασισμένη μόνο σε αποκωδικοποιημένες αξιώσεις. Σε παραγωγή επαληθεύετε την υπογραφή στην πλευρά του server, ελέγχετε το exp, και επιβεβαιώνετε ότι τα iss και aud ταιριάζουν με αυτά που περιμένετε — χρησιμοποιώντας μια δοκιμασμένη βιβλιοθήκη, ποτέ χειροποίητη σύγκριση συμβολοσειρών.

Ένα φωτεινό token που ξεδιπλώνεται και εξετάζεται δίπλα σε μια χρυσή σφραγίδα υπογραφής που αποδεικνύει την αυθεντικότητα
Οποιοσδήποτε μπορεί να διαβάσει ένα token. Μόνο ο κάτοχος του κλειδιού μπορεί να αποδείξει ότι είναι γνήσιο.

Το payload δεν είναι θησαυροφυλάκιο

Επειδή το payload είναι μόνο κωδικοποιημένο σε Base64url, είναι αναγνώσιμο από όποιον υποκλέψει το token. Αντιμετωπίστε τα πάντα μέσα του ως δημόσια. Μη βάζετε κωδικούς πρόσβασης, πλήρεις αριθμούς πιστωτικών καρτών, μυστικά κλειδιά, ή οποιαδήποτε ευαίσθητα προσωπικά δεδομένα σε αξιώσεις JWT — αν μπορείτε να το αποκωδικοποιήσετε εδώ με ένα κλικ, το ίδιο μπορεί να κάνει και οποιοσδήποτε άλλος πάρει ένα αντίγραφο. Η υπογραφή προστατεύει από τροποποίηση, ποτέ από ανάγνωση. Αν πραγματικά χρειάζεστε να κρύψετε το περιεχόμενο του payload, αυτή είναι δουλειά για το JWE (κρυπτογραφημένα tokens), μια εντελώς διαφορετική προδιαγραφή.

Απόρρητο και σχετικά εργαλεία

Η επιθεώρηση ενός token είναι μια ευαίσθητη πράξη, γι' αυτό αυτός ο αποκωδικοποιητής εκτελείται εξ ολοκλήρου στην πλευρά του client — η ανάλυση είναι απλή JavaScript στην καρτέλα σας και τίποτα δεν φεύγει από τη μηχανή σας. Η επικόλληση ενός token συνεδρίας σε ένα εργαλείο που στηρίζεται σε server σημαίνει να παραδίδετε ένα ζωντανό διαπιστευτήριο σε τρίτο, κάτι που είναι ακριβώς αυτό που πρέπει να αποφύγετε. Για την κωδικοποίηση από κάτω απ' όλα αυτά, δείτε το εργαλείο Base64 μας, και εξερευνήστε τα υπόλοιπα εργαλεία προγραμματιστών μας για περισσότερα βοηθητικά προγράμματα εντός συσκευής.

Συχνές ερωτήσεις

Είναι κρυπτογραφημένο ένα JWT;

Όχι. Ένα τυπικό JWT είναι κωδικοποιημένο σε Base64url, όχι κρυπτογραφημένο. Οποιοσδήποτε έχει το token μπορεί να διαβάσει την header και το payload. Χρησιμοποιήστε JWE αν χρειάζεστε το περιεχόμενο κρυμμένο.

Επαληθεύει αυτό το εργαλείο την υπογραφή;

Όχι. Μόνο αποκωδικοποιεί και εμφανίζει την header και το payload. Η επαλήθευση της υπογραφής απαιτεί το μυστικό ή δημόσιο κλειδί του εκδότη και πρέπει να γίνεται στον server σας.

Είναι ασφαλές να επικολλήσω το token μου εδώ;

Ναι. Η αποκωδικοποίηση εκτελείται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας χρησιμοποιώντας τοπική JavaScript. Το token δεν ανεβαίνει, δεν αποθηκεύεται, ούτε στέλνεται σε κανέναν server.

Τι σημαίνουν τα iss, sub, aud, exp και iat;

Είναι καταχωρημένες αξιώσεις: issuer, subject, audience, expiration time και issued-at time. Οι τρεις που σχετίζονται με χρόνο χρησιμοποιούν Unix timestamps σε δευτερόλεπτα.

Μπορώ να εμπιστευτώ τις αξιώσεις που εμφανίζονται μετά την αποκωδικοποίηση;

Όχι από μόνες τους. Οι αποκωδικοποιημένες αξιώσεις μπορεί να προέρχονται από ένα πλαστογραφημένο ή ληγμένο token. Πάντα επαληθεύετε την υπογραφή και ελέγχετε τη λήξη στον server πριν τις εμπιστευτείτε.

Γιατί το token μου έχει τρία μέρη χωρισμένα με τελείες;

Αυτά είναι η header, το payload και η signature, καθένα κωδικοποιημένο σε Base64url και ενωμένο με τελείες. Οι τελείες λένε στους parsers πού αρχίζει και πού τελειώνει κάθε τμήμα.