Bootcamp i backendutveckling med Node.js · Lektion

Generering och validering av JWT-token

Förstå JSON Web Tokens (JWT) och implementera generering och validering av dem för säker åtkomst till API:et.

Lektion 2 av 612 steg

Generering och validering av JWT-token är en gratis lektion i Bootcamp i backendutveckling med Node.js på CoddyKit. Detta är lektion 2 av 6. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Bootcamp i backendutveckling med Node.js, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Bootcamp i backendutveckling med Node.js innehåller totalt 6 lektioner.

Introduktion till JWT: Vad och varför

Välkommen! I den här lektionen går vi igenom JSON Web Tokens (JWT), ett populärt sätt att säkra API:er.

En JWT är ett kompakt och URL-säkert sätt att representera anspråk som ska överföras mellan två parter. Tänk på den som ett digitalt ID-kort för ditt API.

Varför använda JWT för API:er?

JWT erbjuder flera fördelar för moderna webb- och mobil-API:er:

  • Tillståndslöshet: Servern behöver inte lagra sessionsinformation. Varje begäran innehåller användarens autentiseringsuppgifter.
  • Skalbarhet: Det blir enklare att skala applikationer horisontellt eftersom det inte finns något gemensamt sessionstillstånd mellan servrar.
  • Säkerhet: Om JWT implementeras korrekt ger den ett säkert sätt att verifiera användarens identitet och förhindra manipulering.

JWT-struktur: tre delar

En JWT är en sträng som består av tre delar, separerade med punkter (.). Varje del är Base64Url-kodad:

HEADER.PAYLOAD.SIGNATURE

Vi går igenom vad var och en av dessa delar betyder och varför de är viktiga för säkerheten.

JWT-headern

Header består vanligtvis av två delar:

  • alg (Algorithm): Anger den kryptografiska algoritm som används för att signera tokenen (t.ex. HS256, RS256).
  • typ (Type): Anger att tokenen är en JWT.

Exempel (avkodat från Base64Url):

{"alg": "HS256", "typ": "JWT"}

JWT-payloaden (anspråk)

Payload innehåller ”claims” – påståenden om en entitet (till exempel en användare) och ytterligare data.

Anspråk kan vara:

  • Registrerade: Standardfält som iss (utfärdare), exp (förfallotid), sub (subjekt).
  • Offentliga: Anpassade anspråk som registrerats i IANA:s JWT-register.
  • Privata: Anpassade anspråk som avsändaren och mottagaren har kommit överens om.

Exempel på payload:

{"sub": "user123", "name": "Alice", "exp": 1678886400}

JWT-signaturen

Signature är avgörande för att verifiera tokenens äkthet och integritet. Den säkerställer att tokenen inte har manipulerats.

Den skapas genom att den kodade headern, den kodade payloaden, en hemlig nyckel och algoritmen som anges i headern tas och sedan signeras.

Formel (förenklad):

HMACSHA256(encodedHeader + "." + encodedPayload, secretKey)

Python: Generera en JWT

Vi genererar en JWT med hjälp av Pythons bibliotek PyJWT. Installera det först: pip install PyJWT.

Vi definierar en payload med en förfallotid och en hemlig nyckel.

import jwt
import datetime

def main():
    SECRET_KEY = "your-super-secret-key"

    # Define payload with some claims
    payload = {
        "sub": "user123",
        "name": "Alice",
        "exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=30),
        "iat": datetime.datetime.utcnow()
    }

    # Encode the token
    token = jwt.encode(payload, SECRET_KEY, algorithm="HS256")
    print(f"Generated JWT: {token}")

if __name__ == "__main__":
    main()

Hemliga nycklar och säkerhet

SECRET_KEY som används för att signera och verifiera JWT:er är mycket viktig. Om nyckeln röjs kan en angripare skapa giltiga token, vilket ger obehörig åtkomst.

  • Använd alltid en stark, slumpmässigt genererad nyckel.
  • Hårdkoda den aldrig i applikationen. Använd miljövariabler eller en säker tjänst för nyckelhantering.
  • Håll den strikt konfidentiell!

Python: Validera en JWT

För att validera en JWT avkodar du den med samma hemliga nyckel och algoritm. PyJWT verifierar automatiskt signaturen och kontrollerar anspråk som förfallotiden (`exp`).

import jwt
import datetime
import time

def main():
    SECRET_KEY = "your-super-secret-key"

    # Generate a token to validate (short expiry for demo)
    payload_gen = {
        "sub": "user123",
        "name": "Bob",
        "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=5), 
        "iat": datetime.datetime.utcnow()
    }
    token_to_validate = jwt.encode(payload_gen, SECRET_KEY, algorithm="HS256")
    print(f"Token to validate: {token_to_validate}\n")
    time.sleep(1) # Wait a bit for demonstration

    # Attempt to decode/validate it
    try:
        decoded_payload = jwt.decode(token_to_validate, SECRET_KEY, algorithms=["HS256"])
        print("Token is valid!")
        print(f"Decoded Payload: {decoded_payload}")
    except jwt.ExpiredSignatureError:
        print("Token has expired!")
    except jwt.InvalidTokenError:
        print("Invalid token (e.g., bad signature or format).")

if __name__ == "__main__":
    main()

Bästa praxis för JWT

Så här håller du din JWT-implementation säker:

  • Ange förfallotid (exp): Inkludera alltid ett anspråk för förfallotid för att begränsa tidsfönstret för en komprometterad token.
  • HTTPS: Överför alltid JWT:er via HTTPS för att förhindra avlyssning.
  • Säker lagring: Lagra token säkert på klientsidan (t.ex. i HTTP-only-cookies för webben eller i säker lagring på mobila enheter).
  • Refresh tokens: Använd kortlivade åtkomsttoken och mer långlivade refresh tokens för långa sessioner.

Kontrollera dina kunskaper

Repetera komponenterna i en JWT. Vilken av följande delar ansvarar för att säkerställa att tokenen inte har manipulerats?

Sammanfattning: JWT-grunder

I den här lektionen utforskade vi JSON Web Tokens (JWT) för säker autentisering av API:er.

  • JWT:er är kompakta, URL-säkra token med en Header, Payload och Signature.
  • Header definierar tokenens typ och signeringsalgoritm.
  • Payload innehåller ”claims” (data som användar-ID, roller och förfallotid).
  • Signature verifierar tokenens integritet och äkthet.
  • Vi lärde oss att generera och validera JWT:er med Pythons bibliotek PyJWT.
  • Använd alltid starka, hemliga nycklar och ange förfallotider för bättre säkerhet.

Nästa steg är att integrera JWT:er i FastAPI med OAuth2 för ett komplett autentiseringsflöde!

Gratis att börja

Lär dig JavaScript med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
22
Lektioner
92

Vanliga frågor

Är lektionen ”Generering och validering av JWT-token” gratis?

Ja – hela texten till ”Generering och validering av JWT-token” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Bootcamp i backendutveckling med Node.js, kan Ni uppgradera till CoddyKit PRO. Kursen i Bootcamp i backendutveckling med Node.js innehåller totalt 6 lektioner.

Vad lär jag mig i ”Generering och validering av JWT-token”?

Förstå JSON Web Tokens (JWT) och implementera generering och validering av dem för säker åtkomst till API:et. Ni övar på Bootcamp i backendutveckling med Node.js med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Bootcamp i backendutveckling med Node.js?

Du behöver inga förkunskaper. Utbildningen i Bootcamp i backendutveckling med Node.js på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 6.

Hur lång tid tar lektionen ”Generering och validering av JWT-token”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Bootcamp i backendutveckling med Node.js-lektionen?

Ja. Varje Bootcamp i backendutveckling med Node.js-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Användarregistrering och inloggning
  2. Generering och validering av JWT-token
  3. JWT för tillståndslös autentisering
  4. Integrera OAuth2:s lösenordsflöde
  5. Rollbaserad åtkomstkontroll
  6. Rollbaserad åtkomstkontroll (RBAC)
← Tillbaka till Bootcamp i backendutveckling med Node.js