Τι είναι το JWT;

Το JWT (JSON Web Token) είναι ένα αυτοτελές μέσο μεταφοράς πληροφορίας μεταξύ δύο μερών με ασφάλεια. Συγκεκριμένα, χρησιμοποιείται συχνά για την επαλήθευση ταυτότητας χρηστών σε διαδικτυακές εφαρμογές.

Βασικά Χαρακτηριστικά του JWT:

1. Το JWT είναι ένα μικρό σε μέγεθος κείμενο που μπορεί εύκολα να μεταφερθεί μέσω URL με GET, παραμέτρων POST ή σε HTTP headers.

2. Περιέχει όλες τις απαραίτητες πληροφορίες για να επαληθευτεί η ταυτότητα ενός χρήστη και η εγκυρότητα του token χωρίς να χρειάζεται να αναζητηθεί επιπλέον πληροφορία σε κάποια βάση δεδομένων.

3. Μπορεί να υπογραφεί χρησιμοποιώντας ένα μυστικό (με τον αλγόριθμο HMAC) ή ένα ζεύγος δημόσιου/ιδιωτικού κλειδιού (με τον αλγόριθμο RSA ή ECDSA), εξασφαλίζοντας ότι το περιεχόμενο δεν έχει αλλοιωθεί.

Δομή του JWT:

Το JWT αποτελείται από τρία μέρη τα οποία διαχωρίζονται με τελείες (.):

Header: Το πρώτο μέρος περιέχει πληροφορίες για τον τύπο του token και τον αλγόριθμο που χρησιμοποιείται για την υπογραφή του (π.χ., HMAC SHA256 ή RSA).

Payload: Το περιεχόμενο, το οποίο περιέχει τα δεδομένα που θέλουμε να μεταφέρουμε. Αυτά μπορεί να είναι για τον χρήστη (όπως user id, email) και για το ίδιο το token (όπως ημερομηνία λήξης).

Signature: Η υπογραφή, η οποία εξασφαλίζει την ακεραιότητα του token. Υπολογίζεται κρυπτογραφώντας το header και το payload με ένα μυστικό κλειδί ή με ένα ιδιωτικό κλειδί.

Παράδειγμα ενός JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InRrb3VsZXJpc0BnbWFpbC5jb20iLCJleHBpcmF0aW9uIjoiMjAyNC0wMi0yMCAwNTo0Nzo1MS43Nzk5NzQifQ.lvibV2saR3X84gOeQA51bAFxdxqaxL4wOSP5UGvRQBY

Το παραπάνω είναι ένα jwt token. Μπορούμε να χρησιμοποιήσουμε τη παρακάτω σελίδα ώστε να το διαβάσουμε:

https://jwt.io/

Για να κάνει την αποκρυπτογράφηση θα χρειαστούμε και το μυστικό κωδικό: 

8c7fypDnFNcvsc8fUWPKh4lVWrhMfv

Ο μυστικός κωδικός είναι συνήθως αποθηκευμένος σε κάποιο config file της εφαρμογής μας. Με αυτόν τον κωδικό παράγεται το JWT.

Το JWT είναι μια ευέλικτη και ισχυρή τεχνολογία για ασφαλείς εφαρμογές ιστού, ιδίως σε περιβάλλοντα που απαιτούν επεκτασιμότητα και απλότητα.