JWT-tokens genereren en valideren
Leer JSON Web Tokens (JWT) begrijpen en implementeer het genereren en valideren ervan voor veilige API-toegang.
JWT-tokens genereren en valideren is een gratis Bootcamp backendontwikkeling met Node.js-les op CoddyKit. Dit is les 2 van 6. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Bootcamp backendontwikkeling met Node.js. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Bootcamp backendontwikkeling met Node.js bevat in totaal 6 lessen.
Introductie tot JWT: wat en waarom
Welkom! In deze les duiken we in JSON Web Tokens (JWT's), een populaire manier om API's te beveiligen.
Een JWT is een compacte, URL-veilige manier om claims weer te geven die tussen twee partijen worden uitgewisseld. Zie het als een digitale identiteitskaart voor je API.
Waarom JWT's gebruiken voor API's?
JWT's bieden verschillende voordelen voor moderne web- en mobiele API's:
- Stateless: De server hoeft geen sessiegegevens op te slaan. Elk verzoek bevat de authenticatiegegevens van de gebruiker.
- Schaalbaarheid: Applicaties zijn eenvoudiger horizontaal te schalen, omdat er geen gedeelde sessiestatus tussen servers is.
- Beveiliging: Als ze correct zijn geïmplementeerd, bieden JWT's een veilige manier om de identiteit van gebruikers te verifiëren en manipulatie te voorkomen.
JWT-structuur: drie onderdelen
Een JWT is een tekenreeks die uit drie onderdelen bestaat, gescheiden door punten (.). Elk onderdeel is gecodeerd met Base64Url:
HEADER.PAYLOAD.SIGNATURE
Laten we bekijken wat elk onderdeel betekent en waarom het belangrijk is voor de beveiliging.
De JWT-header
De header bestaat meestal uit twee onderdelen:
alg(algoritme): Geeft aan welk cryptografisch algoritme wordt gebruikt om het token te ondertekenen (bijvoorbeeld HS256, RS256).typ(type): Geeft aan dat het token een JWT is.
Voorbeeld (gedecodeerd met Base64Url):
{"alg": "HS256", "typ": "JWT"}De JWT-payload (claims)
De payload bevat de ‘claims’: uitspraken over een entiteit (zoals een gebruiker) en aanvullende gegevens.
Claims kunnen zijn:
- Geregistreerd: Standaardvelden zoals
iss(uitgever),exp(vervaltijd) ensub(onderwerp). - Openbaar: Aangepaste claims die zijn geregistreerd in het IANA JWT-register.
- Privé: Aangepaste claims waar de verzender en ontvanger afspraken over hebben gemaakt.
Voorbeeld van een payload:
{"sub": "user123", "name": "Alice", "exp": 1678886400}De JWT-handtekening
De handtekening is cruciaal voor het verifiëren van de authenticiteit en integriteit van het token. Zo wordt gegarandeerd dat er niet met het token is geknoeid.
De handtekening wordt gemaakt door de gecodeerde header, de gecodeerde payload, een geheime sleutel en het in de header opgegeven algoritme te nemen en deze vervolgens te ondertekenen.
Formule (vereenvoudigd):
HMACSHA256(encodedHeader + "." + encodedPayload, secretKey)Een JWT genereren met Python
Laten we met de Python-bibliotheek PyJWT een JWT genereren. Installeer de bibliotheek eerst: pip install PyJWT.
We definiëren een payload met een vervaltijd en een geheime sleutel.
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()Geheime sleutels en beveiliging
De SECRET_KEY die wordt gebruikt om JWT's te ondertekenen en te verifiëren, is uiterst belangrijk. Als deze sleutel uitlekt, kan een aanvaller geldige tokens vervalsen en zo ongeautoriseerde toegang krijgen.
- Gebruik altijd een sterke, willekeurig gegenereerde sleutel.
- Neem de sleutel nooit rechtstreeks op in je applicatie; gebruik omgevingsvariabelen of een beveiligde sleutelbeheerdienst.
- Houd de sleutel strikt geheim!
Een JWT valideren met Python
Om een JWT te valideren, decodeer je het met dezelfde geheime sleutel en hetzelfde algoritme. PyJWT verifieert automatisch de handtekening en controleert claims zoals de vervaltijd (`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()Best practices voor JWT's
Zo houd je je JWT-implementatie veilig:
- Stel een vervaltijd in (
exp): Neem altijd een vervalclaim op om de periode waarin een gecompromitteerd token bruikbaar is te beperken. - HTTPS: Verstuur JWT's altijd via HTTPS om afluisteren te voorkomen.
- Veilige opslag: Sla tokens veilig op aan de clientzijde (bijvoorbeeld in HTTP-only-cookies voor het web of in beveiligde opslag voor mobiele apparaten).
- Vernieuwingstokens: Gebruik voor lange sessies kortdurende toegangstokens en langer geldige vernieuwingstokens.
Controleer je begrip
Bekijk de onderdelen van een JWT. Welk onderdeel zorgt ervoor dat er niet met het token is geknoeid?
Samenvatting: de essentie van JWT
In deze les hebben we JSON Web Tokens (JWT's) voor veilige API-authenticatie verkend.
- JWT's zijn compacte, URL-veilige tokens met een header, payload en handtekening.
- De header definieert het tokentype en het ondertekeningsalgoritme.
- De payload bevat ‘claims’ (gegevens zoals gebruikers-ID, rollen en vervaltijd).
- De handtekening verifieert de integriteit en authenticiteit van het token.
- We hebben geleerd hoe je JWT's genereert en valideert met de Python-bibliotheek
PyJWT. - Gebruik altijd sterke, geheime sleutels en stel vervaltijden in voor de beveiliging.
Vervolgens integreren we JWT's met OAuth2 in FastAPI voor een volledige authenticatiestroom!
Leer JavaScript met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 22
- Lessen
- 92
Veelgestelde vragen
Is de les “JWT-tokens genereren en valideren” gratis?
Ja — de volledige tekst van “JWT-tokens genereren en valideren” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Bootcamp backendontwikkeling met Node.js wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Bootcamp backendontwikkeling met Node.js bevat in totaal 6 lessen.
Wat leer ik in “JWT-tokens genereren en valideren”?
Leer JSON Web Tokens (JWT) begrijpen en implementeer het genereren en valideren ervan voor veilige API-toegang. Je oefent met Bootcamp backendontwikkeling met Node.js door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Bootcamp backendontwikkeling met Node.js te beginnen?
Ervaring vooraf is niet nodig. Bootcamp backendontwikkeling met Node.js op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 6.
Hoe lang duurt de les “JWT-tokens genereren en valideren”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Bootcamp backendontwikkeling met Node.js?
Ja. Elke les over Bootcamp backendontwikkeling met Node.js bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Gebruikersregistratie en inloggen
- JWT-tokens genereren en valideren
- JWT voor stateless authenticatie
- OAuth2-wachtwoordflow integreren
- Rolgebaseerde toegangscontrole
- Op rollen gebaseerde toegangscontrole (RBAC)