Generering og validering av JWT-token
Forstå JSON Web Tokens (JWT), og implementer generering og validering av dem for sikker tilgang til API-et.
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) ogsub(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!
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
- Brukerregistrering og innlogging
- Generering og validering av JWT-token
- JWT for tilstandsløs autentisering
- Integrasjon av OAuth2-passordflyt
- Rollebasert tilgangskontroll
- Rollebasert tilgangskontroll (RBAC)