A valid JWT authenticates nothing
A JWT is a signed data structure, not authentication. The security lives in the verifier, not the token. Where validation is optional, the boundary is gone.
Opening Claim
A JWT is a signed token. Nothing more. It carries claims and a signature, and the signature attests that something holding a key produced the token. It does not attest that the bearer is authorized. It does not authenticate the request in front of you. When a token verifies, you have learned that the math checked out. You have not learned that the request is legitimate.
This distinction is where teams lose control. A JWT provides no inherent authentication. The trust falls entirely on the implementation and the verification process. The token is a claim. Whether that claim is believed depends on code you wrote, code you imported, and every service in the path that chooses to check it or not check it. The security property does not live in the token. It lives in the conduct of every component that handles it.
Position: stop treating JWTs as an authentication mechanism. They are a signed data structure. Authentication is something your implementation either enforces or fails to enforce. When the signature is treated as proof of identity, the boundary moves out of your control and into the assumption that every verifier behaves correctly, every time. That assumption is the exposure.
The Original Assumption
The original assumption is direct: a valid signature means a valid request. Teams adopt JWTs believing that if the token verifies, the caller is authenticated and authorized. The signature becomes a stand-in for an enforced identity check. Under that assumption, verification is treated as a property of the token rather than as an action the system must perform, correctly, on every request.
That assumption places the entire trust boundary on the implementation and verification process. This is stated, not inferred. The trust falls entirely on implementation. If verification is the only thing standing between a token and access, then verification must execute, correctly, at every layer that grants access. A logically necessary consequence follows. Any layer that does not verify, or verifies incorrectly, grants access on the strength of a token alone. The token does not enforce anything. The verifier enforces, or it does not.
The assumption also presumes the signing key remains controlled. A signature is only meaningful while the key that produces it is held by the issuer alone. The design ties identity to possession of a key and to the correctness of the checks performed against it. Both conditions must hold for the assumption to hold. Neither is guaranteed by the token format. The format describes structure. It does not enforce key custody, and it does not enforce that anyone checks the result.
What Changed
What changed is observable: an uptick in attacks exploiting this. The exact scale is not confirmed. The mechanism is. The attacks target the point the design depends on, which is the implementation and verification process, and they target it at every layer. Three vectors are stated: key compromise, signature forgery, and ignoring validation checks. Each one attacks a different part of the same assumption.
Key compromise removes the single condition the signature depends on. If the signing key is obtained, an attacker produces tokens that verify. Every downstream check that trusts the signature now trusts the attacker. The verification process behaves exactly as designed and grants access, because the token is, by every check available to the verifier, valid. The control did not break. The condition it relied on did.
Signature forgery and ignored validation attack the verifier directly. Forgery produces a token the verifier accepts as authentic without legitimate issuance. Ignoring validation checks means the verifier accepts the token without confirming it at all. In both cases, access is granted on a token that should not have passed. This maps to the core condition: a control that is not enforced is not a control. When verification is skipped or defeated, the token is the only thing presented, and the token authenticates nothing. The boundary that was assumed to exist was never enforced at that layer. If a system allows a token through without validating it, that path will be used.
Mechanism of Failure or Drift
The mechanism is observable at the boundary and nowhere else. A token is presented to a verifier. The verifier grants access or denies it. That is the full extent of what the system exposes. The token presented to a verifier that checks correctly is identical to the token presented to a verifier that checks incorrectly or not at all. Nothing in the artifact distinguishes the two paths. The security outcome is determined entirely by the behavior of the component receiving the token, and that behavior is not carried by the token.
Three behaviors are stated as in play: key compromise, signature forgery, and ignoring validation checks. Each produces the same observable result at the boundary, which is access granted on a token that should not have passed. With key compromise the verifier behaves as designed and still grants access, because the token satisfies every check available to it. With forgery the verifier accepts a token it treats as authentic. With ignored validation the verifier grants access without confirming the token at all. From outside, these are indistinguishable. A token went in, access came out. The failure is not visible in the grant. It is visible only if the verification step is observed directly, and whether that step executed is not something the token reports.
The drift is in the count of enforcement points. The number of verifiers is the number of places verification must execute correctly. The token format does not reduce that count and does not coordinate it. Each component in the path that grants access on a token is an independent place where the check must run and must be right. As the path grows, the count grows, and every added verifier is another independent opportunity for the check to be weak, skipped, or defeated. The condition the design depends on, correct verification at every layer, becomes harder to hold as the system scales, while the token continues to present identically everywhere. One token format and one signing key reach every component, and so does any gap in how any component checks them. Automation scales the function and the failure on the same path.
Expansion into Parallel Pattern
The pattern is not specific to JWTs. It is the pattern of any bearer artifact. A bearer artifact grants access to whoever presents it, on the strength of the artifact alone. Its security depends on each consumer validating it correctly, and the artifact carries no power to make them. The same mechanism that fails for a JWT fails identically for any signed token, any signed cookie, any API key, any session identifier treated as a bearer credential. The format differs. The mechanism does not. Possession of something that looks valid grants access at any point that does not confirm it is valid.
The defining property is the split between where trust is placed and where enforcement happens. Trust is placed in the artifact at issuance. Enforcement happens at every point of use, independently, with no central authority confirming it occurred. The issuer signs once. The consumers check many times, or fail to. The artifact cannot observe its own validation, so the system cannot guarantee the check ran. This is the same structure described above, restated at the level of credential design rather than token format. Identity is asserted by an artifact and is supposed to be confirmed by an action. When the action is optional, the assertion stands alone.
This is why the boundary is the verifier and not the token in every instance of the pattern. The artifact is a claim of identity. A claim is not a boundary. The boundary exists only where an enforcement point validates the claim and refuses access when validation fails. Where no such enforcement runs, there is no boundary, only an artifact passing through. Validation has to be continuous to hold the pattern together, and continuous means at every point of use, every time, with key custody intact. Remove validation from one consumer and the boundary is gone at that consumer, regardless of how rigorously every other consumer checks. The pattern does not degrade gracefully. It fails at the weakest enforcement point, and the artifact reaches all of them.
Hard Closing Truth
A JWT is a signed data structure. It is not authentication. Authentication is an action the system performs against the token on every request that grants access. That distinction is the entire control. Treat the token as proof and the control disappears, because nothing in the token enforces anything. State it plainly. A control that is not enforced is not a control. Verification that does not execute is not verification. The token authenticates nothing on its own, and any layer that grants access on the token alone has no authentication at that layer.
What must now be true is narrow and non-negotiable. Verification executes at every layer that grants access, and it executes identically, on every request. Key custody is a precondition, not an assumption, and the signature is meaningful only while the signing key is held by the issuer alone. Where verification is optional, treat it as absent, because an attacker selects the path where it is absent. The three stated vectors, key compromise, signature forgery, and ignored validation, all resolve to one requirement: the check must run and must be correct everywhere access depends on it. The exact scale of the current attacks is not confirmed. The mechanism they exploit is confirmed, and it is structural.
Operator position. Stop treating the signature as identity. The signature attests that something holding a key produced the token. It does not attest that the request is legitimate, and the gap between those two statements is where access is taken. If a system grants access on a token without enforcing validation at that point, that path will be used. Build on the assumption that it will. Enforce verification as an action, hold the key as a precondition, and treat every enforcement point as a place the boundary can be lost. The token presents the same to all of them. Only your enforcement decides what happens next.
Keep Reading
access-controlCompleting the task was the breach
An identity completed tasks it was never provisioned for. The boundary was described, not enforced. This is a control gap, not a competence problem.
access-controlGoogle gates Workspace by browser, not credential
Google Workspace's move to gate Firefox keys access on a client signature, not identity. A control on the wrong boundary does not stop attackers.
identity-boundaryTexas data centers failed the voltage test
Texas grid voltage failures at data center and crypto sites expose the same admission-without-enforcement gap every identity boundary already has.
Stay in the loop
New writing delivered when it's ready. No schedule, no spam.