Bootcamp i backendudvikling med Node.js · Lektion

JWT til stateless-godkendelse

Implementer JSON Web Tokens (JWT) til stateless-godkendelse, og håndter brugersessioner sikkert.

Lektion 3 af 611 trin

JWT til stateless-godkendelse er en gratis Bootcamp i backendudvikling med Node.js-lektion på CoddyKit. Dette er lektion 3 af 6. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Bootcamp i backendudvikling med Node.js, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Bootcamp i backendudvikling med Node.js-kurset indeholder 6 lektioner i alt.

Hvad er JWT?

I denne lektion går vi i dybden med JSON Web Tokens (JWT'er). De er en kompakt, URL-sikker måde at repræsentere oplysninger på, som skal overføres mellem to parter.

JWT'er er afgørende for tilstandsløs godkendelse. Det betyder, at serveren ikke behøver at gemme sessionsoplysninger. I stedet er alle nødvendige brugerdata indlejret direkte i selve tokenet.

JWT-struktur: Tre dele

En JWT består af tre adskilte dele, som er separeret af punktummer (.):

  • Header: Oplysninger om selve tokenet.
  • Payload: De faktiske data (oplysninger), du vil overføre.
  • Signatur: Bruges til at kontrollere, at tokenet ikke er blevet ændret.

Det ser sådan ud: xxxxx.yyyyy.zzzzz

En dybdegående gennemgang af header og payload

Headeren indeholder normalt to dele:

  • alg: Den algoritme, der bruges til signering (f.eks. HMAC SHA256 eller RSA).
  • typ: Typen af token, som normalt er 'JWT'.

Payloaden indeholder 'oplysninger' – udsagn om en enhed (typisk brugeren) samt yderligere data. Almindelige oplysninger omfatter:

  • sub (emne): Bruger-ID'et.
  • iss (udsteder): Den, der udstedte tokenet.
  • exp (udløbstidspunkt): Hvornår tokenet udløber.

Signaturen forklaret

Signaturen er det, der gør JWT'er sikre. Den oprettes ved at tage den kodede header, den kodede payload, en hemmelig nøgle og den algoritme, der er angivet i headeren, og derefter signere dem.

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )

Hvis nogen forsøger at ændre headeren eller payloaden, mislykkes kontrollen af signaturen, hvilket viser, at tokenet er ugyldigt eller er blevet ændret.

Oversigt over JWT-arbejdsgangen

Sådan fungerer JWT'er typisk i et godkendelsesforløb:

  1. Brugeren logger ind med sine legitimationsoplysninger.
  2. Serveren kontrollerer legitimationsoplysningerne og opretter en JWT.
  3. Serveren sender JWT'en tilbage til klienten.
  4. Klienten gemmer JWT'en (f.eks. i lokal lagring eller en cookie).
  5. Ved efterfølgende forespørgsler sender klienten JWT'en (normalt i Authorization-headeren).
  6. Serveren kontrollerer JWT'ens signatur og udløbstidspunkt, før forespørgslen behandles.

Oprettelse af en JWT i Node.js

Vi bruger det populære bibliotek jsonwebtoken. Installer det først med npm install jsonwebtoken.

Dette eksempel viser, hvordan du signerer (opretter) en ny JWT med en payload og et udløbstidspunkt. Husk at opbevare din secretKey meget sikkert!

const jwt = require('jsonwebtoken');

const payload = {
  userId: 'user123',
  username: 'coddykit'
};

// A strong, secret key. Keep this secure in a .env file!
const secretKey = 'your_super_secret_key_12345'; 

const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });

console.log('Generated JWT:');
console.log(token);

Validering af en JWT i Node.js

Når du modtager en JWT fra klienten, skal din server kontrollere, at den er ægte. Metoden jwt.verify() kontrollerer signaturen og udløbstidspunktet.

Hvis tokenet er gyldigt, returnerer den den afkodede payload. Ellers udløser den en fejl (f.eks. TokenExpiredError eller JsonWebTokenError).

const jwt = require('jsonwebtoken');

// Replace with a valid token generated from the previous step
const tokenToVerify = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJ1c2VyMTIzIiwidXNlcm5hbWUiOiJjb2RkeWtpdCIsImlhdCI6MTY3ODg4NjQwMCwiZXhwIjoxNjc4ODkwMDAwfQ.SOME_RANDOM_SIGNATURE';

const secretKey = 'your_super_secret_key_12345'; 

try {
  const decoded = jwt.verify(tokenToVerify, secretKey);
  console.log('Token is valid!');
  console.log('Decoded Payload:', decoded);
} catch (err) {
  console.log('Token verification failed:');
  console.log(err.message);
}

Sikker opbevaring af JWT'er

Hvor du gemmer JWT'er på klientsiden, er afgørende for sikkerheden:

  • Local Storage / Session Storage: Nemme at bruge, men sårbare over for Cross-Site Scripting-angreb (XSS), hvis skadelig JavaScript-kode kan få adgang til dem.
  • HttpOnly-cookies: Mere sikre mod XSS, fordi JavaScript ikke kan få adgang til dem. De er dog sårbare over for Cross-Site Request Forgery (CSRF), hvis de ikke er beskyttet korrekt.

Ofte bruges en kombination af strategier eller en omhyggelig implementering af CSRF-tokenet.

Adgangstokens kontra fornyelsestokens

For at øge sikkerheden bruger mange programmer to typer tokens:

  • Adgangstoken: Har kort levetid (f.eks. 15 minutter til 1 time) og bruges til direkte API-kald. Hvis det bliver stjålet, er dets anvendelighed begrænset.
  • Fornyelsestoken: Har lang levetid og opbevares sikkert (f.eks. i en HttpOnly-cookie). Det bruges til at hente et nyt adgangstoken, når det aktuelle udløber, uden at brugeren skal logge ind igen.

Dette mønster mindsker risikoen for, at adgangstokens med lang levetid bliver kompromitteret.

Kontrol af JWT-komponenter

Lad os hurtigt teste din forståelse af JWT'er!

JWT'er opsummeret

Du har lært om JSON Web Tokens! Vi gennemgik:

  • Hvad JWT'er er, og hvilken rolle de spiller i tilstandsløs godkendelse.
  • De tre dele: header, payload og signatur.
  • Hvordan man opretter og kontrollerer JWT'er med Node.js.
  • Vigtige overvejelser om lagring på klientsiden og brugen af fornyelsestokens.

JWT'er er et effektivt værktøj til at opbygge sikre og skalerbare godkendelsessystemer i dine Node.js-programmer!

Gratis at komme i gang

Lær JavaScript med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
22
Lektioner
92

Ofte stillede spørgsmål

Er lektionen “JWT til stateless-godkendelse” gratis?

Ja — hele teksten til “JWT til stateless-godkendelse” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Bootcamp i backendudvikling med Node.js-kurset, skal du opgradere til CoddyKit PRO. Bootcamp i backendudvikling med Node.js-kurset indeholder 6 lektioner i alt.

Hvad lærer jeg i “JWT til stateless-godkendelse”?

Implementer JSON Web Tokens (JWT) til stateless-godkendelse, og håndter brugersessioner sikkert. Du øver dig i Bootcamp i backendudvikling med Node.js med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Bootcamp i backendudvikling med Node.js?

Der kræves ingen tidligere erfaring. Bootcamp i backendudvikling med Node.js på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 6.

Hvor lang tid tager lektionen “JWT til stateless-godkendelse”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Bootcamp i backendudvikling med Node.js-lektion?

Ja. Alle Bootcamp i backendudvikling med Node.js-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Brugerregistrering og login
  2. Generering og validering af JWT-tokens
  3. JWT til stateless-godkendelse
  4. Integration af OAuth2-password flow
  5. Rollebaseret adgangskontrol
  6. Rollebaseret adgangskontrol (RBAC)
← Tilbage til Bootcamp i backendudvikling med Node.js