Documentatie
Leer over JWT en hoe het te gebruiken in uw applicaties.
Wat is JWT?
JSON Web Token (JWT) is een open standaard (RFC 7519) voor compacte, veilige gegevensoverdracht tussen partijen als JSON-object.
JWT-structuur
Een JWT bestaat uit drie delen gescheiden door punten: Header.Payload.Signature.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cHeader
Bevat metadata over het token: algoritme (alg) en type (typ).
Payload
Bevat de claims (verklaringen) over een entiteit en metadata.
Handtekening
Wordt gebruikt om te verifiëren dat het token niet is gewijzigd.
Veelvoorkomende Claims
iss (Issuer): identificeert de uitgever van het token
sub (Subject): identificeert het onderwerp van het token
aud (Audience): identificeert de ontvangers van het token
exp (Expiration): vervaltijd (Unix-timestamp)
nbf (Not Before): tijd waarvoor het token niet mag worden geaccepteerd
iat (Issued At): tijd waarop het token is uitgegeven
Ondersteunde Algoritmen
JWT ondersteunt verschillende handtekeningalgoritmen.
HS256 / HS384 / HS512
HMAC met SHA-2 — symmetrische handtekening
RS256 / RS384 / RS512
RSA met SHA-2 — asymmetrische handtekening
ES256 / ES384 / ES512
ECDSA met SHA-2 — asymmetrische elliptische-curve-handtekening
EdDSA (Ed25519)
EdDSA — moderne elliptische-curve-handtekening met Ed25519
Codevoorbeelden
Klaar-voor-gebruik codefragmenten voor JWT in verschillende talen.
const jwt = require('jsonwebtoken');
// Sign
const token = jwt.sign(
{ sub: '1234567890', name: 'John Doe' },
'your-secret-key',
{ algorithm: 'HS256', expiresIn: '1h' }
);
// Verify
const decoded = jwt.verify(token, 'your-secret-key');
console.log(decoded);import { SignJWT, jwtVerify } from 'jose';
// Sign
const secret = new TextEncoder().encode('your-secret-key');
const token = await new SignJWT({ sub: '1234567890', name: 'John Doe' })
.setProtectedHeader({ alg: 'HS256' })
.setExpirationTime('1h')
.sign(secret);
// Verify
const { payload } = await jwtVerify(token, secret);
console.log(payload);import jwt
# Sign
token = jwt.encode(
{"sub": "1234567890", "name": "John Doe"},
"your-secret-key",
algorithm="HS256"
)
# Verify
decoded = jwt.decode(token, "your-secret-key", algorithms=["HS256"])
print(decoded)import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
// Sign
String token = Jwts.builder()
.setSubject("1234567890")
.claim("name", "John Doe")
.signWith(SignatureAlgorithm.HS256, "your-secret-key")
.compact();
// Verify
Claims claims = Jwts.parser()
.setSigningKey("your-secret-key")
.parseClaimsJws(token)
.getBody();import (
"github.com/golang-jwt/jwt/v5"
)
// Sign
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"sub": "1234567890",
"name": "John Doe",
})
tokenString, err := token.SignedString([]byte("your-secret-key"))
// Verify
parsed, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
return []byte("your-secret-key"), nil
})
claims := parsed.Claims.(jwt.MapClaims)require 'jwt'
payload = { sub: '1234567890', name: 'John Doe' }
# Sign
token = JWT.encode(payload, 'your-secret-key', 'HS256')
# Verify
decoded = JWT.decode(token, 'your-secret-key', true, algorithm: 'HS256')
puts decoded[0]use Firebase\JWT\JWT;
$payload = [
'sub' => '1234567890',
'name' => 'John Doe',
];
// Sign
$token = JWT::encode($payload, 'your-secret-key', 'HS256');
// Verify
$decoded = JWT::decode($token, new Key('your-secret-key', 'HS256'));
print_r($decoded);use jsonwebtoken::{encode, decode, Header, Algorithm, Validation, EncodingKey, DecodingKey};
// Sign
let token = encode(
&Header::new(Algorithm::HS256),
&serde_json::json!({"sub": "1234567890", "name": "John Doe"}),
&EncodingKey::from_secret("your-secret-key".as_ref()),
)?;
// Verify
let token_data = decode::<serde_json::Value>(
&token,
&DecodingKey::from_secret("your-secret-key".as_ref()),
&Validation::new(Algorithm::HS256),
)?;using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Text;
var securityKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes("your-secret-key"));
// Sign
var token = new JwtSecurityToken(
claims: new[] { new Claim("sub", "1234567890"), new Claim("name", "John Doe") },
signingCredentials: new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256)
);
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
// Verify
var principal = new JwtSecurityTokenHandler().ValidateToken(tokenString,
new TokenValidationParameters { ValidateIssuerSigningKey = true,
IssuerSigningKey = securityKey, ValidateIssuer = false, ValidateAudience = false },
out _);import JWT
// Sign
let payload = JWTPayload(sub: "1234567890", name: "John Doe")
let signer = JWTSigner.hs256(key: Data("your-secret-key".utf8))
let token = try signer.sign(payload)
// Verify
let verifier = JWTVerifier.hs256(key: Data("your-secret-key".utf8))
let verified = try verifier.verify(token)