JWT: Vad är det? Definition och användningsområden inom webbsäkerhet

Senaste uppdateringen: September 26, 2024

El JSON Web Token, allmänt känd som J.W.T., är en öppen standard för säker överföring av information mellan parter. Den definieras under RFC 7519-specifikationen och används främst i samband med webbsäkerhet för att autentisera användare och säkerställa dataintegritet.

Strukturen för en JWT

Un J.W.T. Den består av tre delar kodade i Base64Url, separerade med punkter:

  • Rubrik: Innehåller metadata om token, såsom typ och signaturalgoritm som används. Till exempel:
{"alg": "HS256", "typ": "JWT"}
  • payload: Det här avsnittet innehåller anspråk, vilka är uttalanden om en enhet (vanligtvis användaren) och ytterligare metadata. Till exempel:
  • {"sub": "1234567890", "name": "John Doe", "admin": true}
  • Signatur: Den används för att validera tokenets integritet och utfärdarnas äkthet. För att beräkna signaturen, rubrik och nyttolast, länkas och signeras med hjälp av en algoritm som HMAC SHA256.
  • Till exempel genereras signaturen från:

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

    Typer av anspråk i en JWT

    Anspråk eller hävdar De är generellt indelade i tre kategorier:

    Registrerade skador

    De är en uppsättning fördefinierade anspråk som rekommenderas för användning i JWT:er. Dessa inkluderar:

    • issUtgivaren av tokenen.
    • nedanÄmnet för token.
    • audMålgruppen för tokenen.
    • expUtgångsdatum för token.
    • nbf: Anger den tidpunkt då token är giltig.

    Offentliga klagomål

    Anspråk kan definieras efter eget tycke av användare, men namnkollisioner måste undvikas. Till exempel:

    • AnvändarnamnAnvändarnamn för den autentiserade individen.
    • rollAnvändarroll (administratör, vanlig användare, etc.).

    Privata anspråk

    Anpassade anspråk skapas för att dela information mellan parter på ett sätt som inte stör registrerade eller offentliga anspråk.

    Hur fungerar en JWT inom webbsäkerhet?

    Arbetsflödet för en J.W.T. följer i allmänhet dessa steg:

    autentisering

    Processen börjar när en användare autentiserar sig, vanligtvis via ett inloggningsformulär. När användaren har verifierats genererar servern en J.W.T. som innehåller information om användarens session.

    Tokengenerering

    Efter autentisering skapar servern en J.W.T. och skickar det som ett svar till klienten. Denna token kan lagras i lokalt utrymme eller som en cookie i webbläsaren.

    Skicka token

    Med varje efterföljande begäran skickar klienten J.W.T. till servern, vanligtvis via headern Tillstånd:

    Authorization: Bearer 

    Tokenverifiering

    Servern tar emot token och verifierar den med hjälp av den hemliga nyckeln eller certifikatet. Om token är giltig och inte har löpt ut beviljas åtkomst till de skyddade resurserna.

    Fördelar med att använda JWT

    Användningen av J.W.T. i webbapplikationer har det flera fördelar:

    Skalbarhet

    mycket J.W.T. De är autonoma, vilket innebär att servrarna inte behöver lagra en användarsession i minnet. Detta förbättrar skalbarheten, eftersom flera serverinstanser kan hantera förfrågningar utan att behöva komma åt databasen för att kontrollera sessionsstatus.

    interoperabilitet

    Att vara en öppen standard, J.W.T. Den är interoperabel mellan olika programmeringsspråk och plattformar, vilket underlättar integration i olika system och tjänster.

    säkerhet

    Möjligheten att signera J.W.T. säkerställer att innehållet inte har ändrats, och användningen av krypteringsalgoritmer lägger till ett extra säkerhetslager och ger konfidentialitet när det behövs.

    Nackdelar med att använda JWT

    Trots dess fördelar finns det också nackdelar med implementeringen J.W.T.:

    Tokenstorlek

    mycket J.W.T. kan bli stora, särskilt om de innehåller mycket information. nyttolastDetta kan leda till ökad nätverksbelastning om det skickas med varje begäran.

    Utgångsdatum och återkallelse

    När den väl har utfärdats, en J.W.T. Den är giltig tills den löper ut. Om en användare behöver återkallas (till exempel om deras konto har komprometterats) måste servern implementera en ytterligare mekanism, till exempel återkallningslistor, eftersom token kan fortsätta att användas tills den löper ut.

    Nyckelhantering

    Säkerheten för J.W.T. Det beror på styrkan på nyckeln som används för att signera token. Att hålla nyckeln säker och rotera den regelbundet är avgörande för applikationssäkerheten.

    Vanliga användningsområden för JWT

    mycket J.W.T. De används i en mängd olika tillämpningar och sammanhang, inklusive:

    API-autentisering

    I applikationer som använder RESTful API:er, J.W.T. Det används ofta för att autentisera förfrågningar. Det gör det möjligt för API-utvecklare att bygga en arkitektur som är både säker och enkel att använda.

    Autentisering mellan mikrotjänster

    I mikrotjänstarkitekturer, den J.W.T. De underlättar autentisering mellan tjänster genom att tillhandahålla ett enkelt sätt att verifiera användare utan att behöva dela sessioner mellan tjänster.

    SSO (Single Sign-On)

    Genomförandet av J.W.T. kan underlätta implementeringen av lösningar SSO, vilket gör att användare kan autentisera sig en gång och få åtkomst till flera applikationer utan att behöva logga in igen.

    Säker informationsdelning

    mycket J.W.T. De är också användbara för att dela information mellan olika parter, vilket säkerställer integriteten och autenticiteten hos den överförda informationen.

    Åtkomstkontroll

    mycket J.W.T. De möjliggör implementation av finjusterade åtkomstkontroller, eftersom data om roller och behörigheter kan inkluderas direkt i token.

    Implementera JWT i ett projekt

    Skapa en JWT

    Så här skapar du en J.W.T., kan du använda olika bibliotek som finns tillgängliga på flera språk, till exempel JavaScript, Python y javaEtt exempel i node.js använder biblioteket jsonwebtoken är:

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

    Verifiera en JWT

    Verifiering av en J.W.T. Det görs på ett liknande sätt, med samma 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', ... }
    });

    Hantering av tokenutgång

    För att hantera tokenförfallodatum måste förfallotiden (anspråket) kontrolleras. exp) i nyttolast innan åtkomst till skyddade resurser beviljas. Om token har gått ut bör användaren omdirigeras för att logga in igen och hämta en ny token.

    Användning av mellanprogramvara

    I många tillämpningar, särskilt och särskilt i samband med node.js med uttrycka, används en mellanprogramvara för att centralt hantera verifieringen av J.W.T.Här är ett grundläggande exempel:

    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 är ett kraftfullt verktyg för att hantera autentisering och auktorisering i webbapplikationer. Dess enkla struktur och möjligheten att verifieras och valideras underlättar implementeringen av säkra, skalbara och interoperabla system. Bästa praxis och korrekt säkerhetshantering måste dock beaktas för att maximera dess effektivitet.