Δημιουργία JWT
Δημιουργήστε ένα υπογεγραμμένο Web Token JSON με δικά σας JSON claims. Επιλέξτε HS256, HS384 ή HS512 με κοινό μυστικό, RS256 έως PS512 με ιδιωτικό κλειδί RSA, ES256 έως ES512 με το αντίστοιχο κλειδί EC ή EdDSA με κλειδί Ed25519, σε μορφή PEM ή JWK. Η γεννήτρια μπορεί να προσθέσει κεφαλίδα iat, exp και kid, υπογράφει με τη βιβλιοθήκη jose και εμφανίζει το συμπαγές token δίπλα στην αποκωδικοποιημένη κεφαλίδα και το payload.
Συχνές ερωτήσεις
Ποιους αλγορίθμους υπογραφής μπορώ να χρησιμοποιήσω;
Η γεννήτρια υποστηρίζει HS256, HS384 και HS512 με κοινό μυστικό, RS256, RS384, RS512, PS256, PS384 και PS512 με ιδιωτικό κλειδί RSA, ES256, ES384 και ES512 με ιδιωτικό κλειδί EC στις καμπύλες P-256, P-384 ή P-521, καθώς και EdDSA με ιδιωτικό κλειδί Ed25519. Ο επιλεγμένος αλγόριθμος γράφεται στην κεφαλίδα alg και το typ ορίζεται πάντα σε JWT.
Τι πρέπει να εισαγάγω ως payload;
Εισαγάγετε ένα αντικείμενο JSON με τα claims σας, για παράδειγμα sub, name, iss, aud ή οποιοδήποτε προσαρμοσμένο μέλος. Οι πίνακες, οι συμβολοσειρές και άλλες τιμές που δεν είναι αντικείμενα απορρίπτονται, επειδή ένα payload JWT πρέπει να είναι αντικείμενο JSON. Η σειρά των claims και οι τιμές τους διατηρούνται ακριβώς όπως τις γράψατε.
Πώς διαβάζεται το μυστικό HMAC;
Για τα HS256, HS384 και HS512, το μυστικό χρησιμοποιείται ως κείμενο UTF-8 αφού αφαιρεθούν τα κενά στην αρχή και στο τέλος. Αν το μυστικό σας είναι δυαδικό, επικολλήστε το ως JWK, για παράδειγμα {"kty": "oct", "k": "..."}, με τα bytes σε base64url· χρησιμοποιούνται τότε τα αποκωδικοποιημένα bytes. Τα κλειδιά PEM απορρίπτονται για αλγορίθμους HMAC, επειδή η χρήση δημόσιου κλειδιού ως μυστικού HMAC είναι ένα συνηθισμένο λάθος.
Πόσο μεγάλο πρέπει να είναι ένα μυστικό HS256;
Το RFC 7518 απαιτεί κλειδί τουλάχιστον όσο η έξοδος του hash, δηλαδή 32 bytes για HS256, 48 για HS384 και 64 για HS512. Το εργαλείο υπογράφει και με μικρότερα μυστικά, ώστε να μπορείτε να αναπαράγετε δοκιμαστικά tokens, αλλά τα μυστικά παραγωγής πρέπει να είναι μεγάλες τυχαίες τιμές, για παράδειγμα από τη Γεννήτρια κωδικών πρόσβασης.
Ποιες μορφές ιδιωτικού κλειδιού γίνονται δεκτές για RSA, EC και EdDSA;
Επικολλήστε ένα μη κρυπτογραφημένο ιδιωτικό κλειδί PEM σε μορφή PKCS #8 (BEGIN PRIVATE KEY), PKCS #1 (BEGIN RSA PRIVATE KEY) ή SEC1 (BEGIN EC PRIVATE KEY), ή ένα ιδιωτικό JWK που περιέχει το μέλος d. Δεν διαβάζονται κρυπτογραφημένα αρχεία PEM ούτε ιδιωτικά κλειδιά OpenSSH. Το κλειδί πρέπει να είναι κατάλληλο για τον αλγόριθμο, επομένως το ES384 απαιτεί κλειδί P-384 και τα κλειδιά RSA χρειάζονται τουλάχιστον 2048 bits.
Πώς ορίζονται τα iat και exp;
Όταν είναι ενεργοποιημένη η επιλογή issued at, το iat ορίζεται στην τρέχουσα ώρα, εκτός αν το payload περιέχει ήδη claim iat. Όταν η λήξη είναι μεγαλύτερη από 0 δευτερόλεπτα, το exp ορίζεται στην τρέχουσα ώρα συν τόσα δευτερόλεπτα και αντικαθιστά οποιοδήποτε exp υπάρχει στο payload. Με λήξη 0 δεν προστίθεται exp και διατηρείται τυχόν exp από το payload.
Σε τι χρησιμεύει το πεδίο kid;
Ένα μη κενό αναγνωριστικό κλειδιού γράφεται στην κεφαλίδα kid, ώστε οι επαληθευτές να μπορούν να επιλέξουν το σωστό κλειδί από ένα JWKS. Αν επικολλήσετε ένα JWKS ως κλειδί υπογραφής, το kid επιλέγει επίσης ποιο κλειδί του συνόλου θα υπογράψει το token. Ο Μετατροπέας JWK και οι γεννήτριες κλειδιών εμφανίζουν το αποτύπωμα RFC 7638, που είναι κατάλληλο για kid.
Τι περιλαμβάνει το αποτέλεσμα;
Λαμβάνετε το συμπαγές token, τον αλγόριθμο, το αναγνωριστικό κλειδιού, τις ώρες έκδοσης και λήξης σε UTC, καθώς και την ακριβή κεφαλίδα και το payload JSON που υπογράφηκαν. Αντιγράψτε το token από το πρώτο τμήμα. Αποκωδικοποιήστε το ξανά αργότερα με τον Αποκωδικοποιητή JWT ή ελέγξτε το με τον Επαληθευτή JWT.
Αποθηκεύονται τα μυστικά ή τα κλειδιά μου;
Όχι. Το μυστικό ή το ιδιωτικό κλειδί μεταδίδεται μόνο στο αίτημα υπογραφής του token, χρησιμοποιείται μία φορά στη μνήμη και δεν καταγράφεται ούτε αποθηκεύεται ποτέ. Παρ’ όλα αυτά, προτιμήστε δοκιμαστικά κλειδιά για πειραματισμούς και μην επικολλάτε ποτέ κλειδί υπογραφής παραγωγής σε οποιοδήποτε διαδικτυακό εργαλείο, εκτός αν ελέγχετε τον διακομιστή.
Υπάρχουν όρια μεγέθους;
Το payload μπορεί να έχει έως 65,536 χαρακτήρες, το κλειδί έως 65,536 χαρακτήρες και το kid έως 256 χαρακτήρες. Οι τιμές λήξης κυμαίνονται από 0 έως 315,360,000 δευτερόλεπτα, δηλαδή δέκα χρόνια. Οι μεγαλύτερες τιμές απορρίπτονται με μήνυμα που αναφέρει το αντίστοιχο πεδίο.