JWT: Hvad er det? Definition og anvendelser inden for websikkerhed

Sidste ændring: 26 september 2024

El JSON Web Token, almindeligvis kendt som J.W.T., er en åben standard for sikker overførsel af information mellem parter. Den er defineret under RFC 7519-specifikationen og bruges primært i forbindelse med websikkerhed til at godkende brugere og sikre dataintegritet.

Strukturen af ​​en JWT

Un J.W.T. Den er sammensat af tre dele kodet i Base64Url, adskilt af punktummer:

  • header: Indeholder metadata om tokenet, såsom den anvendte type og signaturalgoritme. For eksempel:
{"alg": "HS256", "typ": "JWT"}
  • Nyttelast: Dette afsnit indeholder krav, som er udsagn om en enhed (normalt brugeren) og yderligere metadata. For eksempel:
  • {"sub": "1234567890", "name": "John Doe", "admin": true}
  • Underskrift: Det bruges til at validere tokenets integritet og udstedernes ægthed. For at beregne signaturen, header og nyttelast, er linket og signeret ved hjælp af en algoritme som f.eks. HMAC SHA256.
  • For eksempel genereres signaturen fra:

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

    Typer af krav i en JWT

    Krav eller fordringer De er generelt opdelt i tre kategorier:

    Registrerede krav

    De er et sæt foruddefinerede krav, der anbefales til brug i JWT'er. Disse omfatter:

    • issUdstederen af ​​tokenet.
    • nedenfor: Emnet for tokenet.
    • aud: Målgruppen for tokenet.
    • expUdløbsdato for token.
    • nbfAngiver det tidspunkt, hvor tokenet er gyldigt.

    Offentlige klager

    Krav kan defineres efter eget valg af brugerne, men navnekollisioner skal undgås. For eksempel:

    • brugernavnBrugernavn på den godkendte person.
    • rolleBrugerrolle (administrator, almindelig bruger osv.).

    Private krav

    Brugerdefinerede krav oprettes for at dele oplysninger mellem parter på en måde, der ikke forstyrrer registrerede eller offentlige krav.

    Hvordan fungerer en JWT inden for websikkerhed?

    Arbejdsgangen for en J.W.T. følger generelt disse trin:

    autentificering

    Processen begynder, når en bruger autentificerer sig, normalt via en loginformular. Når brugeren er verificeret, genererer serveren en J.W.T. indeholder oplysninger om brugerens session.

    Tokengenerering

    Efter godkendelse opretter serveren en J.W.T. og sender det som et svar til klienten. Dette token kan gemmes i lokal opbevaring eller som en cookie i browseren.

    Afsendelse af tokenet

    Med hver efterfølgende anmodning sender klienten J.W.T. til serveren, normalt via headeren Tilladelse:

    Authorization: Bearer 

    Tokenbekræftelse

    Serveren modtager tokenet og verificerer det ved hjælp af den hemmelige nøgle eller certifikatet. Hvis tokenet er gyldigt og ikke er udløbet, gives der adgang til de beskyttede ressourcer.

    Fordele ved at bruge JWT

    Anvendelsen af J.W.T. I webapplikationer har det flere fordele:

    Skalerbarhed

    masse J.W.T. De er autonome, hvilket betyder, at serverne ikke behøver at gemme en brugersession i hukommelsen. Dette forbedrer skalerbarheden, da flere serverinstanser kan håndtere anmodninger uden at skulle tilgå databasen for at kontrollere sessionsstatus.

    interoperabilitet

    Som en åben standard, J.W.T. Det er interoperabelt på tværs af forskellige programmeringssprog og platforme, hvilket letter integrationen i forskellige systemer og tjenester.

    Sikkerhed

    Evnen til at underskrive J.W.T. sikrer, at indholdet ikke er blevet ændret, og brugen af ​​krypteringsalgoritmer tilføjer et ekstra lag af sikkerhed og giver fortrolighed, når det er nødvendigt.

    Ulemper ved at bruge JWT

    Trods fordelene er der også ulemper ved implementeringen J.W.T.:

    Tokenstørrelse

    masse J.W.T. kan blive store, især hvis de indeholder mange oplysninger. nyttelastDette kan føre til øget netværksoverhead, hvis det sendes med hver anmodning.

    Udløb og tilbagekaldelse

    Når den er udstedt, en J.W.T. Den er gyldig indtil den udløber. Hvis en bruger skal tilbagekaldes (for eksempel hvis deres konto er blevet kompromitteret), skal serveren implementere en yderligere mekanisme, såsom tilbagekaldelseslister, da tokenet kan fortsætte med at blive brugt indtil det udløber.

    Nøglehåndtering

    Sikkerheden ved J.W.T. Det afhænger af styrken af ​​den nøgle, der bruges til at signere tokenet. Det er afgørende for applikationens sikkerhed at holde denne nøgle sikker og rotere den regelmæssigt.

    Almindelige anvendelser af JWT

    masse J.W.T. De bruges i en række forskellige applikationer og sammenhænge, ​​herunder:

    API-godkendelse

    I applikationer, der bruger RESTful API'er, J.W.T. Det bruges ofte til at godkende anmodninger. Det giver API-udviklere mulighed for at bygge en arkitektur, der er både sikker og brugervenlig.

    Godkendelse mellem mikrotjenester

    I mikroservicearkitekturer, den J.W.T. De letter godkendelse mellem tjenester ved at give en enkel måde at verificere brugere på uden behov for at dele sessioner mellem tjenester.

    SSO (Single Sign On)

    Gennemførelsen af J.W.T. kan fremme implementeringen af ​​løsninger SSO, hvilket giver brugerne mulighed for at autentificere én gang og få adgang til flere applikationer uden at skulle logge ind igen.

    Sikker informationsdeling

    masse J.W.T. De er også nyttige til at dele information mellem forskellige parter og dermed sikre integriteten og ægtheden af ​​de overførte data.

    Control de Acceso

    masse J.W.T. De muliggør implementering af finjusterede adgangskontroller, da data om roller og tilladelser kan inkluderes direkte i tokenet.

    Implementering af JWT i et projekt

    Oprettelse af en JWT

    Sådan opretter du en J.W.T., kan du bruge forskellige biblioteker, der er tilgængelige på flere sprog, f.eks. JavaScript, Python y JavaEt eksempel i node.js bruger biblioteket jsonwebtoken Det er:

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

    Bekræftelse af en JWT

    Verifikation af en J.W.T. Det gøres på en lignende måde, ved hjælp af det samme bibliotek:

    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', ... }
    });

    Håndtering af tokenudløb

    For at håndtere tokenudløb skal udløbstiden (kravet) kontrolleres. exp) i nyttelast før der gives adgang til beskyttede ressourcer. Hvis tokenet er udløbet, skal brugeren omdirigeres til at logge ind igen og hente et nyt token.

    Brug af middleware

    I mange anvendelser, især og særligt i forbindelse med node.js med Express, bruges en middleware til centralt at håndtere verifikationen af J.W.T.Her er et grundlæggende eksempel:

    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.');
    });

    El JSON Web Token Det er et effektivt værktøj til at administrere godkendelse og autorisation i webapplikationer. Dets enkle struktur og evne til at blive verificeret og valideret letter implementeringen af ​​sikre, skalerbare og interoperable systemer. Bedste praksis og korrekt sikkerhedsstyring skal dog tages i betragtning for at maksimere dets effektivitet.