JWT: Kaj je to? Definicija in uporaba v spletni varnosti

Zadnja posodobitev: 26 september 2024

Spletni žeton JSON , splošno znan kot JWT , je odprt standard za varen prenos informacij med strankami. Opredeljen je v specifikaciji RFC 7519 in se uporablja predvsem v kontekstu spletne varnosti za preverjanje pristnosti uporabnikov in zagotavljanje celovitosti podatkov.

Struktura JWT

JWT je sestavljen iz treh delov, kodiranih v Base64Url , ločenih s pikami:

  • Glava: Vsebuje metapodatke o žetonu, kot sta uporabljeni tip in algoritem podpisa. Na primer:
{"alg": "HS256", "typ": "JWT"}
  • Nosilnost: Ta razdelek vsebuje trditve, ki so izjave o entiteti (običajno uporabniku) in dodatne metapodatke. Na primer:
  • {"sub": "1234567890", "name": "John Doe", "admin": true}
  • Podpis: Uporablja se za preverjanje integritete žetona in pristnosti izdajateljev. Za izračun podpisa se glava in tovor, so povezani in podpisani z uporabo algoritma, kot je HMAC SHA256.
  • Na primer, podpis je ustvarjen iz:

    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      your-256-bit-secret)

    Vrste zahtevkov v JWT

    Zahtevki so običajno razdeljeni v tri kategorije :

    Prijavljene terjatve

    Gre za niz vnaprej določenih zahtevkov, priporočenih za uporabo v JWT-jih. Ti vključujejo:

    • issIzdajatelj žetona.
    • spodaj: Zadeva žetona.
    • audCiljna publika žetona.
    • expDatum poteka veljavnosti žetona.
    • nbf: Označuje čas, ko je žeton veljaven.

    Javne pritožbe

    Uporabniki lahko poljubno definirajo trditve, vendar se morajo izogibati kolizijam imen. Na primer:

    • uporabniško imeUporabniško ime overjene osebe.
    • VlogaUporabniška vloga (skrbnik, navaden uporabnik itd.).

    Zasebni zahtevki

    Zahtevki po meri so ustvarjeni za izmenjavo informacij med strankami na način, ki ne bo motil registriranih ali javnih zahtevkov.

    Kako deluje JWT v spletni varnosti?

    Delovni tok JWT običajno sledi tem korakom:

    Preverjanje pristnosti

    Postopek se začne, ko se uporabnik uspešno overi, običajno prek prijavnega obrazca. Ko je uporabnik preverjen, strežnik ustvari JWT z informacijami o uporabnikovi seji.

    Generiranje žetonov

    Po overitvi strežnik ustvari JWT in ga pošlje odjemalcu kot odgovor. Ta žeton je lahko shranjen v lokalni shrambi ali kot piškotek v brskalniku.

    Pošiljanje žetona

    Z vsako naslednjo zahtevo odjemalec pošlje JWT strežniku, običajno prek glave Authorization :

    Authorization: Bearer 

    Preverjanje žetonov

    Strežnik prejme žeton in ga preveri s tajnim ključem ali potrdilom. Če je žeton veljaven in ni potekel, je dostop do zaščitenih virov odobren.

    Prednosti uporabe JWT

    Uporaba JWT v spletnih aplikacijah ima več prednosti:

    Razširljivost

    JWT-ji so samostojni , kar pomeni, da strežnikom ni treba vzdrževati uporabniške seje v pomnilniku. To izboljša skalabilnost, saj lahko več primerkov strežnika obravnava zahteve, ne da bi morali dostopati do baze podatkov za preverjanje stanja seje.

    Interoperabilnost

    Kot odprti standard je JWT interoperabilen v različnih programskih jezikih in platformah. To olajša integracijo v različne sisteme in storitve.

    varnost

    Možnost podpisa JWT zagotavlja, da vsebina ni bila spremenjena, uporaba algoritmov za šifriranje pa doda dodatno plast varnosti in zagotavlja zaupnost, kadar je to potrebno.

    Slabosti uporabe JWT

    Kljub prednostim ima JWT tudi slabosti :

    Velikost žetona

    JWT-ji lahko postanejo veliki, še posebej, če vsebujejo veliko informacij v koristnem tovoru . To lahko povzroči povečano obremenitev omrežja, če se pošiljajo z vsako zahtevo.

    Potek veljavnosti in preklic

    Ko je JWT izdan, je veljaven do poteka veljavnosti. Če je treba uporabnika preklicati (na primer, če je bil njegov račun ogrožen), mora strežnik implementirati dodaten mehanizem, kot so seznami preklicanih žetonov, saj se žeton lahko uporablja do poteka veljavnosti.

    Upravljanje ključev

    Varnost JWT je odvisna od moči ključa, ki se uporablja za podpis žetona. Varno shranjevanje tega ključa in njegova redna menjava sta ključnega pomena za varnost aplikacije.

    Pogoste uporabe JWT

    JWT- ji se uporabljajo v različnih aplikacijah in kontekstih, vključno z:

    Preverjanje pristnosti API-ja

    V aplikacijah, ki uporabljajo RESTful API-je, se JWT pogosto uporablja za preverjanje pristnosti zahtev. Razvijalcem API-jev omogoča, da zgradijo arhitekturo, ki je varna in enostavna za uporabo.

    Avtentikacija med mikroservisi

    V arhitekturah mikroservisov JWT- ji olajšajo preverjanje pristnosti med storitvami, saj zagotavljajo preprost način preverjanja uporabnikov brez potrebe po delitvi sej med storitvami.

    SSO (enotna prijava)

    Izvajanje JWT lahko olajša uvajanje rešitev SSO , kar uporabnikom omogoča enkratno overjanje in dostop do več aplikacij, ne da bi se morali ponovno prijaviti.

    Varna izmenjava informacij

    JWT-ji so uporabni tudi za izmenjavo informacij med različnimi stranmi, kar zagotavlja celovitost in avtentičnost posredovanih podatkov.

    Nadzor dostopa

    JWT- ji omogočajo izvajanje natančnih kontrol dostopa, saj je mogoče podatke o vlogah in dovoljenjih vključiti neposredno v žeton.

    Implementacija JWT v projektu

    Ustvarjanje JWT-ja

    Če želite ustvariti J.W.T., lahko uporabite različne knjižnice, ki so na voljo v več jezikih, kot so JavaScript, Python y JavaPrimer v Node.js uporaba knjižnice jsonwebtoken je:

    const jwt = require('jsonwebtoken');
    const token = jwt.sign({ id: user.id }, 'your-256-bit-secret', { expiresIn: '1h' });

    Preverjanje JWT-ja

    Preverjanje JWT se izvede podobno, z uporabo iste knjižnice:

    jwt.verify(token, 'your-256-bit-secret', function(err, decoded) {
      if (err) {
        return console.log('Token inválido');
      }
      console.log(decoded); // { id: 123, i Ss: 'your-issuer', ... }
    });

    Obravnavanje poteka veljavnosti žetonov

    Za obravnavo poteka veljavnosti žetona je treba pred odobritvijo dostopa do zaščitenih virov preveriti čas poteka veljavnosti (claim exp ) v koristnem tovoru . Če je žeton potekel, je treba uporabnika preusmeriti, da se ponovno prijavi in ​​pridobi nov žeton.

    Uporaba vmesne programske opreme

    V mnogih aplikacijah, zlasti v kontekstu Node.js z Expressom , se vmesna programska oprema uporablja za centralno upravljanje preverjanja JWT . Tukaj je osnovni primer:

    const express = require('express');
    const jwt = require('jsonwebtoken');
    const app = express();

    const checkToken = (req, res, next) => {
    const token = req.headers['authorization']?.split(' ')[1];
    if (!token) return res.sendStatus(401); // No autorizado

    jwt.verify(token, 'your-256-bit-secret', (err, decoded) => {
    if (err) return res.sendStatus(403); // Prohibido
    req.user = decoded; // Guardar información del usuario en el request
    next(); // Continuar a la siguiente middleware
    });
    };

    app.get('/protected', checkToken, (req, res) => {
    res.send('Este es un recurso protegido.');
    });

    Spletni žeton JSON je zmogljivo orodje za upravljanje preverjanja pristnosti in avtorizacije v spletnih aplikacijah. Njegova preprosta struktura in možnost preverjanja ter validacije olajšata implementacijo varnih, skalabilnih in interoperabilnih sistemov. Vendar pa je treba za povečanje njegove učinkovitosti upoštevati najboljše prakse in ustrezno upravljanje varnosti.