JWT Decoder (no signature verification)
Encoding & CryptoEverything runs locally in your browser — nothing is uploaded
Split a JWT into its header, payload and signature, format all three, and turn the iat, nbf and exp claims into readable dates with a clear expiry flag. One thing has to be said plainly: this tool decodes, it does not verify signatures. The header and payload are only Base64URL-encoded JSON, so anybody can edit a field — change role from user to admin, say — leave the signature untouched, and still get a successful decode here. A successful decode means the token is well-formed, not that it can be trusted. Trust requires recomputing the signature with a secret or a public key, and that needs a key this tool does not have and should not have. The signatureVerification: not-performed line in the output is the machine-readable version of that sentence.
Features
- Splits and formats the header, payload and signature
- Converts iat, nbf and exp into ISO timestamps and reports whether the token has expired
- Accepts unpadded Base64URL, a Bearer prefix and line-wrapped tokens
- Output is a single JSON document whose fields can be copied straight out
- Explains a wrong segment count, and reports a 5-part token as encrypted JWE rather than a JWT
- No signature verification, stated in the output itself — most online decoders never mention it
How to use
- Paste the token, with or without a Bearer prefix
- Press Ctrl/⌘ + Enter, or click Run
- Read the three segments and the timestamp block, and check whether exp has passed
- Click Copy to take the result — but never read it as proof that the token is valid
FAQ
- It decoded successfully, so the token is valid, right?
- No. This tool does not verify signatures, so it cannot tell whether a token was tampered with or who issued it. Anyone can construct a syntactically valid JWT with any payload at all, and it will decode here just as happily. Validity has to be established on the server by checking the signature with a secret (HS256) or a public key (RS256). A public key in the browser can only verify asymmetric signatures; an HS256 secret must never be shipped to a client.
- Is the payload encrypted?
- No. Base64URL is an encoding, not encryption, so anyone holding the token can read everything inside it — which is precisely what this tool does. Never put passwords, phone numbers or identity numbers in a JWT payload. If you need confidentiality, use JWE, which produces a 5-part token this tool cannot read.
- Why does the output say signatureVerification: not-performed?
- Because verifying a signature requires a key, and that key does not belong in a browser. All the tool can honestly do is say that it did not verify — rather than letting you assume "it decoded, therefore it was checked". That line does not change to performed for any token you paste.
- Whose clock decides whether it expired?
- Yours. The expiry flag compares exp against your machine time, so a wrong system clock gives a wrong answer. The authoritative expiry check always belongs on the server, since a client clock can be set to anything.
- Why will my token not decode?
- Usually a few characters were lost when copying — tokens are long and easy to truncate. The next most common cause is a 5-part JWE token, which is encrypted rather than merely signed. Note also that JWTs use Base64URL (- and _ instead of + and /, with no = padding), which this tool already handles.
Related tools
Base64
Encoding & CryptoConvert text to Base64 and back, with correct UTF-8 handling for accents, CJK and emoji. Runs entirely in your browser — nothing is uploaded.
JSON Formatter
FormattingFormat, minify and validate JSON, pinpointing syntax errors to an exact line and column. Optional key sorting; runs in your browser.
Timestamp Converter
ConversionConvert Unix timestamps into readable dates and back, with seconds and milliseconds told apart, a time zone picker and batch mode. Runs in your browser.
URL Encode
Encoding & CryptoEscape text into %XX form and back again, treating a whole URL and a single parameter value as different jobs. Runs entirely in your browser.
HTML Entities
Encoding & CryptoTurn < > & and quotes into HTML entities and decode them back in a single pass, so &lt; becomes <, not an angle bracket. Runs in your browser.
Unicode Escape
Encoding & CryptoConvert non-ASCII text and emoji into \uXXXX or \xXX escapes and back, with emoji written as proper surrogate pairs. Runs entirely in your browser.