/ security / jwt
Member
Theme: SystemContrast: Standard

JWT decoder and verifier

Pin to your tools

Decode a JSON Web Token, check its expiry and claims, and verify its signature with a secret or public key.

Runs entirely in your browser. What you type is never sent to our servers.

Payload
token · 0 lines
PasteOpen fileCtrl OClear

Payload

View
payload · 0 lines
DownloadCopyCtrl Shift C

A secret for HS256/384/512, a public key as PEM (SPKI or certificate) for the others, or a JWK or JWKS (the key is picked by the token’s kid). The key is never shared or saved.

localtested · v0.15.0 · 37 test cases

history · 0

Processed input shows up here while this page is open. Reloading the page clears it.

Code examples

Copy and paste these into your own project. Each one uses only the language's standard library, so there is nothing to install.

Example

Star up to 3 languages to show them first on every tool page.

Favorite JavaScript
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'

const payload = token.split('.')[1]
const json = Buffer.from(payload, 'base64url').toString('utf8')

console.log(JSON.stringify(JSON.parse(json), null, 2))

What it does

Decode a JSON Web Token to read its header and payload, see whether it has expired, and verify its signature with a secret or a public key. The token is decoded in your browser, this page shows no ads, and the token and key are never shared or saved.

How to use it

  1. Paste the token. A Bearer prefix and line breaks are ignored.
  2. Read the payload as formatted or compact JSON. Below it you see the algorithm, the status, and the exp, nbf and iat times next to how far they are from now.
  3. To verify the signature, enter the key: a secret for HS256, HS384 and HS512, or a public key (PEM or JWK) for RS, PS, ES and EdDSA.
  4. Switch the header and the payload between JSON and Claims: Claims lists each claim with what it means and shows time claims as dates.
  5. Open the Encode tab to write a header and a payload and sign them with a secret or a private key (PKCS#8 PEM or JWK). Nothing on that tab is saved, shared or added to the history.

Examples

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

The payload of that token:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

Its signature verifies with the secret your-256-bit-secret.

Good to know

  • Decoding is not verifying: the payload is only encoded, not encrypted, and anyone can read it.
  • Your server must verify the signature before trusting any claim.
  • A token with the algorithm none is unsigned, so anyone could have made it.
  • Treat live tokens like passwords. Prefer expired or test tokens when you paste one here.
  • A pasted JWKS is searched for the token’s kid, and a single JWK is used as it is. The page never fetches a key set from the token’s issuer.
  • An HMAC secret shorter than its hash (32, 48 or 64 bytes) can be guessed, so the page warns you. A secret can be read as UTF-8 text or as Base64URL.

What is a JWT?

A JSON Web Token is three Base64URL parts joined by dots: a header naming the signing algorithm, a payload with claims such as who the token is for and when it expires, and a signature. Anyone can read the first two parts; only the signature proves the token came from someone holding the key.

Frequently asked questions

Is decoding a token the same as verifying it?

No. Decoding only reads the contents, which are not encrypted. Verifying checks the signature with the key, and your server must do that before it trusts any claim.

What do exp, nbf and iat mean?

exp is when the token expires, nbf is the time before which it is not valid and iat is when it was issued, all in seconds since 1970. This tool compares them with your device's clock.

Is it safe to paste a real token here?

The token is decoded in your browser and never sent to our servers, and this page shows no ads. Still, treat live tokens like passwords: prefer expired or test tokens.

Changelog for this tool

Keyboard shortcuts

Close

Everywhere

Search tools and actions
Ctrl K
Show this help
?
Switch theme
Ctrl Shift L
Pin the selected tool (in search)
Ctrl P

On a tool

Send the output to the first suggestion
Ctrl ↵
Open a file into the input
Ctrl O
Copy the output
Ctrl Shift C
Close searchesc
toolsBase64 encoder and decoderEncode text to Base64 or decode Base64 back to text, with standard and URL-safe alphabets.EncodingJSON formatter and validatorFormat, minify and validate JSON, with the exact line and column of any error.FormattingRegex testerTest JavaScript regular expressions with live highlighting, capture groups and a plain-language explanation.TextUUID and ULID generatorGenerate UUID v4, UUID v7 and ULID in bulk, or paste an ID to see its version, variant and timestamp.GeneratorsUnix timestamp converterConvert Unix timestamps to dates and back, in any time zone, with ISO 8601, RFC 2822 and relative time.Date and timeHash and HMAC generatorCalculate MD5, SHA-1, SHA-2, SHA-3, BLAKE2, BLAKE3 and CRC-32 hashes of text or a file, with optional HMAC.SecurityPassword generator and strength checkerGenerate random passwords, passphrases and PINs, or check how strong a password is.SecurityJWT decoder and verifierDecode a JSON Web Token, check its expiry and claims, and verify its signature with a secret or public key.SecurityCIDR and IP subnet calculatorCalculate the range, mask and size of IPv4 and IPv6 networks, split them into subnets, and check what contains or overlaps what.NetworkCron expression explainerRead a cron expression in plain language, see its next runs in any time zone, and tidy it into its standard form.Date and timeSort linesSort lines of text A to Z or Z to A, in natural order (file2 before file10), by code point, by number or by length.TextRemove duplicate linesRemove duplicate lines from a list, keep the first or last copy, ignore case or spaces, or drop every line that repeats.TextCompare lists and textCompare two lists line by line: find what is in both, only in one, or in either, or see a marked line diff side by side.TextText case converter and slugifyConvert text to camelCase, snake_case, kebab-case, Title Case and more, or turn a title into a URL slug with accents handled.TextURL encode, decode and parsePercent-encode and decode text for URLs, or take a URL apart into scheme, host, path and query and edit the query as a table.EncodingValidators: IBAN, BSN, VAT, card and ISBNCheck an IBAN, Dutch BSN, credit card number, EU VAT number, email address, URL or ISBN, with the reason when it fails. One value per line.ValidationHTML entity encoder and decoderEscape text for HTML with named, decimal or hex entities, or turn entities such as & and é back into characters.EncodingEscape and unescape stringsEscape text for a JSON or JavaScript string, a SQL string, a CSV field, a regular expression or a shell word, or undo the escaping.EncodingEAN, UPC and GTIN check digitsCheck the check digit of an EAN-8, EAN-13, UPC-A or GTIN-14, add a missing one, read the country from the GS1 prefix and convert between ISBN-10 and EAN-13. One code per line.ValidationTest data generatorGenerate valid-looking test IBANs, BSNs, EAN barcodes and EU VAT numbers in bulk. They pass the checks, but belong to no one.GeneratorsSQL formatter and minifierFormat SQL so each clause sits on its own line, or minify it onto one line, for MySQL, PostgreSQL, SQLite, SQL Server and BigQuery.FormattingNumber base converterConvert numbers between binary, octal, decimal, hex and any base from 2 to 36, with big numbers, two's complement and a bit view.EncodingYAML, TOML and JSON converterConvert between JSON, YAML and TOML, or validate and pretty-print a document, with the line and column of every error.FormattingCSV and JSON converterConvert CSV to a JSON array of objects or arrays, or JSON back to CSV. Detects the delimiter and reads Dutch Excel files with semicolons and decimal commas.DataGlob and .gitignore testerTest glob patterns and .gitignore rules against a list of paths and see which paths match and which rule matched them.TextColour converterConvert a colour between HEX, RGB, HSL, HWB and OKLCH, check its WCAG contrast against a background, or build a Material 3 tonal palette from it.Formattingchmod calculatorConvert Unix file permissions between octal (755), letters (rwxr-xr-x), ls -l and chmod clauses, with a checkbox grid and the setuid, setgid and sticky bits.SecurityUser-agent parserRead a user-agent string: browser, engine, OS, device type and whether it is a bot. Leave it empty to read your own browser.NetworkConvert cURL to codePaste a cURL command and get the same request as fetch, Axios, Python requests, Go or PHP. Nothing is run and nothing is sent.NetworkMarkdown previewWrite Markdown and see it rendered as you type, or copy the HTML. Raw HTML is shown as text and links are checked, so nothing in the preview can run.FormattingBarcode and QR code generatorMake a QR code, EAN-13, UPC-A, Code 128, ITF-14 or Data Matrix barcode, download it as SVG or PNG, or read a code from an image.GeneratorspagesChangelogWhat changed in each releasepagesAboutWhat codeknife.dev is and who makes itpagesIdeasSuggest improvements and vote on other visitors’ ideas.pagesPrivacyWhat leaves your browser and what is storedpagesAccessibilityConformance, known limitations and how to report a problempagesMembershipRemove ads and raise the limitspagesactions