Start now →

JWT Is Not Secure — And Most Developers Misunderstand It

By The Fintech Engineer · Published March 30, 2026 · 3 min read · Source: Fintech Tag
Regulation
JWT Is Not Secure — And Most Developers Misunderstand It

JWT Is Not Secure — And Most Developers Misunderstand It

The Fintech EngineerThe Fintech Engineer3 min read·Just now

--

Press enter or click to view image in full size

I’ve lost count of how many times I’ve heard “we use JWT, so it’s secure” stated like a closed case.

I work in fintech, and the gap between what developers assume JWT does and what it actually does has caused real damage — leaked user data, privacy issues, compliance headaches.

JWT is a container, not a lock

JWT is a format.

Three base64-encoded parts:

Separated by dots.

That’s it.

It gives structure to data in transit. It does not hide anything.

Anyone holding a JWT can decode the payload in seconds without any key.

It looks cryptographic — which is exactly why people trust it more than they should.

Three flavors, and most people only know one

Unsigned JWT (alg: none)
No signature, no integrity check.
The spec allows it. Your server shouldn’t.

JWS (signed)
What nearly everyone actually means when they say “JWT”.

Think:

Tamper-proof envelope, clear plastic

JWE (encrypted)
The only variant that actually hides the payload.

Less common, but the only one that provides real confidentiality.

How JWE works under the hood

JWE uses hybrid encryption:

Only the holder of the private key can:

  1. Decrypt the CEK
  2. Use it to decrypt the payload

The frontend question nobody asks early enough

If JWE is encrypted… how does the frontend use it?

Short answer:

It doesn’t read it.

Typical flow:

The frontend treats it as an opaque blob.

Why the frontend should not decrypt JWE

Decryption requires a private key.

If that key exists in frontend code:

Browsers are not secure environments:

Everything shipped to the client can be inspected.

Where I keep seeing this go wrong

The pattern repeats:

Teams adopt signed JWTs…
then start putting sensitive data inside:

Because it “looks secure”.

It isn’t.

Every system touching that token can read it:

In fintech, that’s not just bad design — it becomes a GDPR / PSD2 issue.

The rule I stick to

If the data needs to stay secret, it doesn’t go in a signed JWT.

Either:

Quick mental model

Final thought

JWT is a good tool. I use it daily.

But:

encoded ≠ encrypted
signed ≠ secret

Treating a transparent envelope like a vault is how sensitive data ends up where it shouldn’t be.

Written by The Fintech Engineer
Breaking down how money really works in the modern world.

This article was originally published on Fintech Tag and is republished here under RSS syndication for informational purposes. All rights and intellectual property remain with the original author. If you are the author and wish to have this article removed, please contact us at [email protected].

NexaPay — Accept Card Payments, Receive Crypto

No KYC · Instant Settlement · Visa, Mastercard, Apple Pay, Google Pay

Get Started →