Decode, verify, and generate JSON Web Tokens
Decode, verify, and generate JSON Web Tokens (JWTs) with our free, privacy-first online tool. Get instant security analysis, validate signatures, and understand JWT structure without uploading your tokens to any server. Perfect for developers debugging authentication flows, security auditors analyzing token security, and teams implementing JWT-based auth systems.
All JWT decoding, verification, and generation happens in your browser. Your tokens and secrets never leave your device.
Automatic detection of security issues: algorithm "none" attacks, missing expiration, sensitive data exposure, and more.
Supports HMAC (HS256/384/512), RSA (RS256/384/512), and ECDSA (ES256/384/512) algorithms for complete JWT ecosystem coverage.
Instantly decode any JWT token to view its header, payload, and signature. Our decoder parses the Base64URL-encoded parts and displays them in human-readable JSON format with syntax highlighting.
Validate JWT signatures to ensure tokens haven't been tampered with. Enter your secret key, select the algorithm, and get instant verification results with detailed error messages if validation fails.
Create custom JWT tokens for testing and development. Define your header, add standard or custom claims to the payload, and generate properly signed tokens with your chosen algorithm.
Automatic security analysis detects common JWT vulnerabilities and best practice violations. Get real-time warnings about token security issues before they become production problems.
Your JWT tokens and secret keys are highly sensitive. Unlike other online JWT tools that may send your data to servers for processing, our tool operates entirely in your browser.
Security Note: While our tool is safe for development and testing, always follow JWT security best practices in production: use strong secrets, set appropriate expiration times, validate signatures, and never store sensitive data in JWT payloads (JWTs are signed, not encrypted).
Our JWT decoder is 100% client-side, meaning your tokens never leave your browser or get uploaded to any server. However, for production tokens containing sensitive data, we recommend using this tool only in secure environments. If you're concerned about security, you can use this tool offline by saving the page locally, or use command-line JWT tools for maximum security.
The algorithm "none" is a critical security vulnerability. It indicates that the JWT has no signature verification, meaning anyone can create or modify the token without needing a secret key. This is a severe security risk and should never be used in production. If you see this warning, the token is likely invalid or part of a security exploit attempt.
Signature verification can fail for several reasons: (1) The secret key is incorrect, (2) The wrong algorithm is selected, (3) The token has been modified or tampered with, (4) For RSA/ECDSA, you need the public key (not the private key) to verify, (5) The token format is invalid. Double-check your secret key, ensure you've selected the correct algorithm from the token's header, and verify the token hasn't been modified.
Symmetric algorithms (HMAC: HS256, HS384, HS512) use the same secret key for both signing and verifying tokens. This is simpler but requires sharing the secret key between all parties. Asymmetric algorithms (RSA: RS256/384/512, ECDSA: ES256/384/512) use a private key to sign tokens and a public key to verify them. This is more secure for distributed systems where multiple services need to verify tokens but shouldn't be able to create them.
No. JWTs are signed (to prevent tampering) but not encrypted. Anyone who receives the JWT can decode and read the payload using a tool like this. Only store non-sensitive information in JWTs, such as user IDs, roles, and public metadata. Never store passwords, credit card numbers, social security numbers, or other sensitive data in JWT payloads. If you need to transmit sensitive data, use JWE (JSON Web Encryption) instead.
Add an "exp" (expiration) claim to your JWT payload with a Unix timestamp value. For example, to create a token that expires in 1 hour, calculate the current time plus 3600 seconds: Math.floor(Date.now() / 1000) + 3600. Our generator allows you to add custom claims — just add a claim with key "exp" and the timestamp value. Always include expiration claims in production JWTs to limit the damage if a token is compromised.