Πώς να το χρησιμοποιήσετε
- Επιλέξτε HS256, HS384 ή HS512.
- Επεξεργαστείτε τα claims του payload και κάντε κλικ στο «Ορισμός iat και exp» για να προσθέσετε την τρέχουσα ώρα και μια λήξη.
- Εισαγάγετε ένα δοκιμαστικό μυστικό ή δημιουργήστε ένα τυχαίο 256-bit.
- Αντιγράψτε το υπογεγραμμένο token. Για να ελέγξετε ένα token, μεταβείτε στην «Επαλήθευση υπογραφής», επικολλήστε το και εισαγάγετε το μυστικό.
Πώς λειτουργεί
Ένα JSON Web Token (RFC 7519) αποτελείται από τρία μέρη κωδικοποιημένα με Base64URL: μια κεφαλίδα, ένα φορτίο claims και μια υπογραφή. Με τους αλγόριθμους HMAC HS256, HS384 και HS512, η υπογραφή είναι ένα HMAC με SHA-256, SHA-384 ή SHA-512 πάνω στο «header.payload», με κλειδί ένα κοινό μυστικό. Όποιος διαθέτει το μυστικό μπορεί να δημιουργεί και να επαληθεύει tokens.
Το εργαλείο σειριοποιεί την κεφαλίδα και το φορτίο ως συμπαγές JSON, τα κωδικοποιεί και τα υπογράφει με το crypto.subtle, το Web Crypto API που είναι ενσωματωμένο στο πρόγραμμα περιήγησής σας. Το πεδίο alg στην κεφαλίδα αντιστοιχεί πάντα στον επιλεγμένο αλγόριθμο, το typ είναι από προεπιλογή JWT και τυχόν άλλα πεδία κεφαλίδας, όπως το kid, διατηρούνται. Η επιλογή «Ορισμός iat και exp» καταγράφει την τρέχουσα ώρα ως iat (issued at) και προσθέτει την επιλεγμένη διάρκεια ζωής ως exp, αμφότερα σε δευτερόλεπτα από την 1η Ιανουαρίου 1970 UTC. Το αποτέλεσμα συμφωνεί με άλλες βιβλιοθήκες JWT· για παράδειγμα, το κλασικό δείγμα token του jwt.io αναπαράγεται ακριβώς.
Το μυστικό μπορεί να είναι απλό κείμενο (τα UTF-8 bytes του είναι το κλειδί) ή bytes κωδικοποιημένα σε Base64/Base64URL, όπως χρησιμοποιούν πολλά frameworks. Το κουμπί τυχαίου μυστικού δημιουργεί 32 τυχαία bytes με το crypto.getRandomValues. Για HS256, χρησιμοποιήστε τουλάχιστον 32 τυχαία bytes· σύντομα μυστικά που επιλέγει ο άνθρωπος μπορούν να μαντευτούν εκτός σύνδεσης από οποιοδήποτε token.
Η επαλήθευση αποκωδικοποιεί το token, ελέγχει ότι χρησιμοποιεί αλγόριθμο HMAC και υπολογίζει ξανά την υπογραφή με το crypto.subtle.verify. Επίσης εμφανίζει πότε τα exp ή nbf σημαίνουν ότι το token έχει λήξει ή δεν είναι ακόμη έγκυρο. Οι RS256, ES256 και άλλοι αλγόριθμοι δημόσιου κλειδιού δεν υποστηρίζονται και η επαλήθευση εδώ δεν ελέγχει issuer, audience ή άλλα claims που μπορεί να απαιτεί η εφαρμογή σας.
Παραδείγματα
Δοκιμή ενός API τοπικά
Ο διακομιστής ανάπτυξής σας αναμένει HS256 tokens υπογεγραμμένα με «dev-secret-change-me». Ορίστε το sub σε ένα δοκιμαστικό αναγνωριστικό χρήστη, κάντε κλικ στο «Ορισμός iat και exp» με 1 ώρα, εισαγάγετε το μυστικό και στείλτε το token σε μια κεφαλίδα Authorization: Bearer.
Έλεγχος ποιο μυστικό υπέγραψε ένα token
Ένα δοκιμαστικό token απορρίπτεται. Επικολλήστε το στο «Επαλήθευση υπογραφής» και δοκιμάστε το δοκιμαστικό μυστικό: το «Η υπογραφή δεν είναι έγκυρη» σας λέει ότι το token υπογράφηκε με διαφορετικό μυστικό ή ότι το μυστικό είναι σε διαφορετική μορφή (κείμενο έναντι Base64).
Αναπαραγωγή του δείγματος του jwt.io
Με header {"alg":"HS256","typ":"JWT"}, payload {"sub":"1234567890","name":"John Doe","iat":1516239022} και μυστικό «your-256-bit-secret», το token τελειώνει σε SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, το ίδιο όπως στο jwt.io.
Συχνές ερωτήσεις
Αποστέλλεται το μυστικό μου στον διακομιστή σας;
Όχι. Η υπογραφή και η επαλήθευση εκτελούνται με το Web Crypto API μέσα στο πρόγραμμα περιήγησής σας, και το μυστικό δεν αποθηκεύεται ούτε αποστέλλεται πουθενά. Συνιστούμε και πάλι να χρησιμοποιείτε μόνο δοκιμαστικά μυστικά, επειδή ένα πραγματικό μυστικό υπογραφής δεν πρέπει ποτέ να πληκτρολογείται σε έναν ιστότοπο.
Γιατί η υπογραφή δεν είναι έγκυρη παρόλο που το μυστικό είναι σωστό;
Ελέγξτε τη μορφή του μυστικού. Ορισμένα συστήματα χρησιμοποιούν το κείμενο του μυστικού, άλλα το αποκωδικοποιούν πρώτα από Base64, κάτι που δίνει διαφορετικά bytes κλειδιού. Επίσης, ελέγξτε ότι το token δεν έχει αλλάξει και ότι χρησιμοποιεί τον ίδιο αλγόριθμο.
Μπορώ να δημιουργήσω tokens RS256 ή ES256;
Όχι με αυτό το εργαλείο. Υποστηρίζει μόνο τους αλγόριθμους HMAC με κοινό μυστικό HS256, HS384 και HS512.
Είναι το payload κρυπτογραφημένο;
Όχι. Ένα υπογεγραμμένο JWT είναι μόνο κωδικοποιημένο· ο καθένας μπορεί να το αποκωδικοποιήσει και να διαβάσει το payload. Η υπογραφή αποδεικνύει μόνο ότι δεν έχει αλλάξει. Μην βάζετε κωδικούς πρόσβασης ή άλλα μυστικά στο payload.
Απόρρητο
Τα tokens δημιουργούνται και επαληθεύονται μόνο στο πρόγραμμα περιήγησής σας με το Web Crypto API. Το header, το payload, το token και το μυστικό δεν μεταφορτώνονται, δεν αποθηκεύονται και δεν περιλαμβάνονται στα analytics.