Bootcamp i backendutvikling med Node.js · leksjon

Generering og validering av JWT-token

Forstå JSON Web Tokens (JWT), og implementer generering og validering av dem for sikker tilgang til API-et.

Leksjon 2 av 612 trinn

Generering og validering av JWT-token er en gratis leksjon i Bootcamp i backendutvikling med Node.js på CoddyKit. Dette er leksjon 2 av 6. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Bootcamp i backendutvikling med Node.js, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 6 leksjoner.

Introduksjon til JWT: Hva og hvorfor

Velkommen! I denne leksjonen skal vi se nærmere på JSON Web Tokens (JWT-er), en populær måte å sikre API-er på.

En JWT er en kompakt, URL-sikker måte å representere krav som skal overføres mellom to parter på. Tenk på den som et digitalt ID-kort for API-et ditt.

Hvorfor bruke JWT-er for API-er?

JWT-er har flere fordeler for moderne web- og mobil-API-er:

  • Tilstandsløshet: Serveren trenger ikke å lagre øktinformasjon. Hver forespørsel inneholder brukerens autentiseringsdetaljer.
  • Skalerbarhet: Det er enklere å skalere applikasjoner horisontalt siden det ikke finnes en delt økttilstand på tvers av servere.
  • Sikkerhet: Hvis de implementeres riktig, gir JWT-er en sikker måte å bekrefte brukerens identitet og forhindre manipulering på.

JWT-struktur: Tre deler

En JWT er en streng som består av tre deler, atskilt med punktum (.). Hver del er kodet med Base64Url:

HEADER.PAYLOAD.SIGNATURE

La oss se nærmere på hva hver av disse delene betyr, og hvorfor de er viktige for sikkerheten.

JWT-headeren

Header består vanligvis av to deler:

  • alg (Algorithm): Angir den kryptografiske algoritmen som brukes til å signere tokenet (for eksempel HS256 eller RS256).
  • typ (Type): Angir at tokenet er en JWT.

Eksempel (dekodet fra Base64Url):

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

JWT-payloaden (claims)

Payload inneholder «claims» – utsagn om en enhet (for eksempel en bruker) og ytterligere data.

Claims kan være:

  • Registrerte: Standardfelter som iss (utsteder), exp (utløpstidspunkt) og sub (subjekt).
  • Offentlige: Tilpassede claims som er registrert i IANA JWT Registry.
  • Private: Tilpassede claims som avsenderen og mottakeren har blitt enige om.

Eksempel på payload:

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

JWT-signaturen

Signature er avgjørende for å bekrefte tokenets ekthet og integritet. Den sikrer at tokenet ikke har blitt manipulert.

Den opprettes ved å ta den kodede headeren, den kodede payloaden, en hemmelig nøkkel og algoritmen som er angitt i headeren, og deretter signere dem.

Forenklet formel:

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

Python: Generere en JWT

La oss generere en JWT med Python-biblioteket PyJWT. Installer det først: pip install PyJWT.

Vi definerer en payload med et utløpstidspunkt og en hemmelig nøkkel.

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()

Hemmelige nøkler og sikkerhet

SECRET_KEY som brukes til å signere og bekrefte JWT-er, er svært viktig. Hvis denne nøkkelen blir kompromittert, kan en angriper forfalske gyldige tokener og dermed få uautorisert tilgang.

  • Bruk alltid en sterk, tilfeldig generert nøkkel.
  • Hardkod den aldri i applikasjonen; bruk miljøvariabler eller en sikker tjeneste for nøkkelhåndtering.
  • Hold den fullstendig konfidensiell!

Python: Validere en JWT

For å validere en JWT dekoder du den med den samme hemmelige nøkkelen og algoritmen. PyJWT bekrefter automatisk signaturen og kontrollerer claims som utløpstidspunktet (`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()

Beste praksis for JWT

Slik holder du JWT-implementasjonen sikker:

  • Angi utløpstidspunkt (exp): Inkluder alltid et utløps-claim for å begrense tidsrommet et kompromittert token kan brukes i.
  • HTTPS: Overfør alltid JWT-er via HTTPS for å forhindre avlytting.
  • Sikker lagring: Lagre tokener sikkert på klientsiden (for eksempel i HTTP-only-cookies på web og i sikker lagring på mobil).
  • Refresh-tokener: For lange økter bør du bruke kortvarige tilgangstokener og refresh-tokener med lengre levetid.

Test forståelsen din

Gå gjennom komponentene i en JWT. Hvilken av delene sørger for at tokenet ikke har blitt manipulert?

Oppsummering: Det viktigste om JWT

I denne leksjonen utforsket vi JSON Web Tokens (JWT-er) for sikker autentisering av API-er.

  • JWT-er er kompakte, URL-sikre tokener med en Header, Payload og Signature.
  • Header definerer tokenets type og signeringsalgoritme.
  • Payload inneholder «claims» (data som bruker-ID, roller og utløpstidspunkt).
  • Signature bekrefter tokenets integritet og ekthet.
  • Vi lærte å generere og validere JWT-er med Python-biblioteket PyJWT.
  • Bruk alltid sterke, hemmelige nøkler og angi utløpstidspunkter av hensyn til sikkerheten.

Deretter skal vi integrere JWT-er i FastAPI ved hjelp av OAuth2 for å lage en komplett autentiseringsflyt!

Gratis å komme i gang

Lær deg JavaScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
22
Leksjoner
92

Ofte stilte spørsmål

Er leksjonen «Generering og validering av JWT-token» gratis?

Ja – hele teksten i «Generering og validering av JWT-token» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Bootcamp i backendutvikling med Node.js-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 6 leksjoner.

Hva lærer jeg i «Generering og validering av JWT-token»?

Forstå JSON Web Tokens (JWT), og implementer generering og validering av dem for sikker tilgang til API-et. Du øver på Bootcamp i backendutvikling med Node.js med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Bootcamp i backendutvikling med Node.js?

Ingen tidligere erfaring er nødvendig. Bootcamp i backendutvikling med Node.js på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 6.

Hvor lang tid tar leksjonen «Generering og validering av JWT-token»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Bootcamp i backendutvikling med Node.js-leksjonen?

Ja. Alle Bootcamp i backendutvikling med Node.js-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Brukerregistrering og innlogging
  2. Generering og validering av JWT-token
  3. JWT for tilstandsløs autentisering
  4. Integrasjon av OAuth2-passordflyt
  5. Rollebasert tilgangskontroll
  6. Rollebasert tilgangskontroll (RBAC)
← Tilbake til Bootcamp i backendutvikling med Node.js