CodeKitHub
Εργαλεία κωδικοποίησης

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

Τελευταία ενημέρωση:

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

Header

Payload

Decoded entirely in your browser — no signature verification, and the token is never sent anywhere.

Τι είναι αυτό το εργαλείο;

Ένα JWT (JSON Web Token) είναι ένα συμπαγές, ασφαλές για URL string που χρησιμοποιείται για τη μεταφορά claims μεταξύ δύο μερών — συνηθέστερα ως token αυθεντικοποίησης μετά τη σύνδεση. Έχει τρία μέρη χωρισμένα με τελεία: μια κεφαλίδα (αλγόριθμος και τύπος token), ένα payload (τα πραγματικά claims — user ID, ρόλοι, λήξη, κ.λπ.), και μια υπογραφή (που χρησιμοποιείται από τον server για να επαληθεύσει ότι το token δεν παραποιήθηκε).

Η κεφαλίδα και το payload είναι απλώς JSON κωδικοποιημένο σε Base64URL — όχι κρυπτογραφημένο — οπότε ο καθένας μπορεί να τα αποκωδικοποιήσει και να τα διαβάσει χωρίς μυστικό κλειδί. Μόνο η υπογραφή απαιτεί μυστικό για επαλήθευση. Αυτό ακριβώς κάνει αυτό το εργαλείο: αποκωδικοποιεί τα αναγνώσιμα μέρη και τα δείχνει ως μορφοποιημένο JSON, χωρίς να προσπαθεί να επαληθεύσει την υπογραφή.

Τα JWT τυποποιούνται στο RFC 7519, με το επίπεδο υπογραφής (JWS) να ορίζεται ξεχωριστά στο RFC 7515 — χρήσιμες αναφορές όταν χρειάζεστε την επίσημη λίστα καταχωρημένων claims όπως exp, iat, sub και aud.

Γιατί να το χρησιμοποιήσετε;

  • Άμεσα αναγνώσιμη κεφαλίδα και payload, μορφοποιημένα ως JSON — δεν χρειάζεται πια να διαχωρίζετε το string χειροκίνητα και να το αποκωδικοποιείτε Base64 με το χέρι.
  • Αυτόματος έλεγχος λήξης: αν το payload έχει claim "exp", μετατρέπεται σε αναγνώσιμη ημερομηνία και επισημαίνεται ως ληγμένο ή έγκυρο.
  • Αντιγραφή με ένα κλικ για την κεφαλίδα ή το payload ξεχωριστά.
  • 100% από την πλευρά του client — το token αποκωδικοποιείται τοπικά και δεν μεταδίδεται ποτέ, ασφαλές να χρησιμοποιηθεί ακόμα και με tokens από σύστημα παραγωγής.
  • Δεν πραγματοποιείται ούτε διεκδικείται επαλήθευση υπογραφής — αυτό είναι εργαλείο εντοπισμού σφαλμάτων/επιθεώρησης, όχι επικυρωτής.

Πώς χρησιμοποιείται

  1. Επικολλήστε το JWT σας στο πλαίσιο (το πλήρες string, συμπεριλαμβανομένων και των τριών μερών χωρισμένων με τελεία).
  2. Η κεφαλίδα και το payload αποκωδικοποιούνται αυτόματα καθώς πληκτρολογείτε.
  3. Ελέγξτε τη γραμμή λήξης αν το token έχει claim "exp" — δείχνει την ακριβή ημερομηνία και αν το token έχει λήξει.
  4. Κάντε κλικ στο "Copy" κάτω από οποιοδήποτε πλαίσιο για να αντιγράψετε αυτό το τμήμα ως JSON.

Παράδειγμα

Είσοδος

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.dQw4w9WgXcQ

Έξοδος

Header: {"alg": "HS256"}
Payload: {"sub": "1234", "name": "John Doe", "exp": 1700000000}

Η υπογραφή (τρίτο μέρος) δεν αποκωδικοποιείται ή ελέγχεται ποτέ — είναι ένα αδιαφανές hash που χρησιμοποιείται από την πλευρά του server για επαλήθευση αυθεντικότητας.

Πρακτικές συμβουλές

  • Εντοπισμός σφαλμάτων "άκυρο token": αποκωδικοποιήστε πρώτα το payload για να ελέγξετε το claim "exp" — ένα ληγμένο token είναι η πιο συχνή αιτία, και δεν είναι πάντα προφανές μόνο από το μήνυμα σφάλματος.
  • Έλεγχος τι πραγματικά περιέχει το token ενός API τρίτου: πολλά APIs επιστρέφουν ένα αδιαφανές JWT ως access token — αποκωδικοποιήστε το εδώ για να δείτε τα scopes, το user ID, ή τη λήξη που πραγματικά λαμβάνει η ενσωμάτωσή σας.
  • Ποτέ μην υποθέτετε ότι ένα JWT είναι κρυπτογραφημένο: αν δείτε ευαίσθητα δεδομένα (email, εσωτερικά IDs) σε αποκωδικοποιημένο payload κατά την ανάπτυξη, αυτό είναι σήμα να μετακινήσετε αυτά τα δεδομένα στην πλευρά του server αντί να εμπιστεύεστε τον client να μην τα διαβάσει.

Συνήθη claims που θα δείτε σε ένα payload

ClaimΣημασία
subSubject — συνήθως το user ID που αντιπροσωπεύει το token
expΏρα λήξης (Unix timestamp) — το token είναι άκυρο μετά από αυτήν
iatIssued at — πότε δημιουργήθηκε το token
issIssuer — ποια υπηρεσία/server εξέδωσε το token
audAudience — για ποια υπηρεσία προορίζεται το token
role / roles / scopeΠροσαρμοσμένα claims — δικαιώματα ή ρόλοι που έχουν χορηγηθεί στον χρήστη (δεν αποτελούν μέρος του προτύπου JWT, αλλά είναι εξαιρετικά συνηθισμένα)

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

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

Όχι. Η επαλήθευση μιας υπογραφής απαιτεί το μυστικό ή δημόσιο κλειδί που χρησιμοποιήθηκε για την υπογραφή του token, το οποίο έχει μόνο ο server έκδοσης. Αυτό το εργαλείο μόνο αποκωδικοποιεί την κεφαλίδα και το payload — τα ανθρωπίνως αναγνώσιμα μέρη — ώστε να μπορείτε να επιθεωρήσετε claims και λήξη χωρίς να χρειάζεστε κανένα κλειδί.

Είναι ασφαλές να επικολλήσω εδώ ένα πραγματικό JWT παραγωγής;

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

Γιατί μπορεί ο καθένας να διαβάσει το payload του JWT μου χωρίς κωδικό;

Εκ σχεδιασμού — η κεφαλίδα και το payload ενός JWT είναι κωδικοποιημένα σε Base64URL, όχι κρυπτογραφημένα. Η κωδικοποίηση δεν είναι ασφάλεια· απλώς κάνει το JSON ασφαλές για URL κατά τη μετάδοση. Ποτέ μην βάζετε μυστικά (κωδικούς, αριθμούς πιστωτικών καρτών) απευθείας σε payload JWT — υποθέστε ότι όποιος έχει το token μπορεί να διαβάσει το περιεχόμενό του.

Τι σημαίνει το claim "exp" και γιατί έχει σημασία;

Το "exp" είναι η ώρα λήξης του token, ως Unix timestamp (δευτερόλεπτα από το 1970). Οι servers απορρίπτουν ένα JWT μόλις περάσει αυτή η ώρα, αναγκάζοντας τον client να αυθεντικοποιηθεί ξανά. Αυτό το εργαλείο το μετατρέπει σε αναγνώσιμη ημερομηνία και επισημαίνει αν έχει ήδη λήξει, κάτι χρήσιμο για τον εντοπισμό προβλημάτων τύπου "γιατί αποσυνδέθηκε η συνεδρία μου".

Το token μου δείχνει σφάλμα ανάλυσης JSON — γιατί;

Είτε το string δεν είναι έγκυρο JWT (θα πρέπει να είναι ακριβώς τρία μέρη χωρισμένα με τελεία), είτε έχει περικοπεί ή αλλοιωθεί — μια συνηθισμένη αιτία είναι ένα token που χωρίστηκε κατά λάθος σε πολλαπλές γραμμές ή έχασε τελικούς χαρακτήρες κατά την αντιγραφή.

Σχετικά εργαλεία