TL;DR: Native JWT support verifies bearer tokens against JWKS, exposes trusted claims to policy conditions, and centralises issuer, audience, and subject checks instead of duplicating parsing across services, according to Cerbos. That reduces boilerplate and audit drift, but it does not replace disciplined token governance or production verification controls.
At a glance
What this is: This is Cerbos' native JWT verification update, which verifies bearer tokens against configured keysets and makes trusted claims available to policy conditions.
Why it matters: It matters because IAM teams can centralise token validation and claim enforcement instead of re-implementing JWT parsing and checks across services, reducing policy drift and audit inconsistency.
Context
JWT verification is the process of checking that a bearer token was issued by the right issuer, is still valid, and has not been altered. In identity programmes, that matters because token handling is often duplicated across gateways, services, and policy engines, which is where subtle drift creeps in.
Cerbos' update addresses that drift by moving verification into the policy decision point and exposing claims for consistent checks. For IAM teams, the question is not whether JWTs work, but where trust is established, how keys are refreshed, and how consistently token claims are enforced across the request path.
Key questions
Q: How should security teams centralise JWT verification across services?
A: Security teams should verify JWTs once at a policy decision point, then expose only validated claims to downstream logic. That reduces duplicated parsing, keeps issuer and audience checks consistent, and makes audits easier. The key is to treat token verification as part of access control, not as application boilerplate.
Q: Why do JWT policy checks drift when teams decode tokens in app code?
A: Drift appears when applications treat decoded claims as trusted input and each service re-implements its own parsing rules. Small differences in clock skew, issuer handling, or audience validation create inconsistent access decisions and make audits harder to reconcile.
Q: How do you know whether JWT verification is actually working as intended?
A: You know it is working when every service rejects the same invalid token for the same reason and valid tokens are accepted only after issuer, audience, expiry, and signature checks pass. If acceptance differs across services, the control is fragmented and the identity trust boundary is not stable.
Q: Should organisations rely on JWKS refresh or hard-coded signing keys?
A: Use JWKS refresh for production token trust whenever the issuer supports rotation. Hard-coded keys create a brittle trust model, increase operational friction during rotation, and make it easier for stale signing material to remain active longer than intended.
Technical breakdown
Native JWT verification at the policy decision point
Cerbos can ingest a bearer token directly from the authorization request, verify its signature against a configured key set, and then expose the verified claims under request.auxData.jwt. That means the application does not need to decode the token, copy claims into the request payload, or repeat issuer and audience checks in every service. The technical value is consistency: one verification path, one policy surface, and fewer opportunities for mismatched parsing logic across callers.
Practical implication: move token validation into the policy layer where the same issuer, audience, and subject rules can be applied everywhere.
JWKS refresh, key rotation, and cache behaviour
Cerbos supports remote JWKS endpoints and local key files, then caches keys while respecting HTTP cache headers or a configured refresh interval. That matters because JWT trust is only as good as the freshness of the signing key set. If a provider rotates keys, stale caches or hard-coded key material can create false negatives, broken access decisions, or a wider exposure window for compromised keys. Multi-keyset support also lets a request point to the right trust source when issuers differ.
Practical implication: align verification caching with your issuer rotation pattern so that key freshness does not depend on application restarts.
Policy conditions using verified claims
Once a token is verified, Cerbos makes claims available in CEL expressions, so policy can assert issuer, audience, and subject consistency directly. That is materially different from passing decoded claims around as trusted application data. The engine is not simply transporting token content; it is treating verification as a prerequisite for policy evaluation. This is the important control boundary, because policy logic should only consume claims that have already passed signature and time validation.
Practical implication: write policy conditions against verified claims, not against claims that a service merely decoded from the token.
Threat narrative
Attacker objective: The objective is to turn a token that should be narrowly trusted into a reusable access artifact that can reach protected services or actions.
- Entry begins with stolen or replayed bearer tokens, which remain valuable if services accept them without consistent verification or audience checks.
- Credential abuse escalates when different services parse the same JWT differently, allowing issuer confusion, weak time handling, or skipped audience validation to create inconsistent trust decisions.
- Impact occurs when a valid-looking token reaches protected resources and policy drift lets an unauthorised caller act with legitimate-looking identity context.
Breaches seen in the wild
- Salesloft OAuth token breach: hackers stole OAuth tokens to access Salesforce data via Salesloft.
- Internet Archive breach 2024: An exposed GitLab token opened Internet Archive code and 31 million user records; unrotated Zendesk tokens let the attacker back in weeks later.
Read our 52 NHI Breaches Analysis report for a comprehensive view of breaches impacting Non-Human Identities including AI Agents.
NHI Mgmt Group analysis
Policy-level JWT verification reduces identity drift, but only if the token becomes the source of truth for access decisions. The operational problem is not decoding a JWT, it is making sure every service trusts the same issuer, audience, and subject signals. When teams validate tokens in different places, the identity model fragments and access decisions become inconsistent. Practitioners should treat verification as a central control boundary, not an application convenience.
Centralised claim enforcement closes a common governance gap in distributed IAM. Teams often standardise on OIDC but still copy claims into request objects and re-check them in each service. That creates policy drift, because the application layer can diverge from the identity layer over time. The result is audit friction and inconsistent denial behaviour. Practitioners should view policy-driven claim evaluation as a governance control, not just a code-reduction tactic.
Long-lived or stale signing keys create trust debt in JWT-based architectures. Native verification does not remove the need for disciplined rotation, cache refresh, and issuer management. If the key set is stale, verification can become a false assurance control that preserves access for longer than intended. The practical lesson is that trust freshness matters as much as token syntax.
Issuer confusion is a control failure, not a parsing bug. The article's strongest message is that many JWT issues arise because teams assume a token can be safely interpreted anywhere in the stack. That assumption breaks once multiple services, gateways, and policy points each make their own trust decisions. Practitioners should standardise verification at the point of authorisation and stop treating token decoding as a reusable application pattern.
JWT verification belongs in identity governance because claims are authorization evidence, not application metadata. Once claims drive policy, they become part of the access control record and need the same consistency as roles or entitlements. That makes token validation, key rotation, and issuer trust part of IAM operations, not just application engineering. Practitioners should manage JWT trust as a governed access path.
What this signals
Centralised token verification is becoming a governance requirement, not an implementation preference. Once claims drive access decisions, the organisation needs one authoritative trust path for issuer, audience, and signature validation. That reduces the chance that a service accepts a token the policy layer would have rejected, which is where many identity-control failures start.
JWT handling should now be read as part of access governance, not just application plumbing. If the policy engine is the place where verified claims become authorization evidence, then token lifecycle, key freshness, and audience enforcement belong in the same operating model as entitlement reviews and access policy maintenance.
For practitioners
- Standardise verification at the policy boundary Require services to pass bearer tokens to the policy engine and let one verification path enforce signature, issuer, audience, and expiry checks.
- Use JWKS and planned refresh intervals Prefer remote JWKS with cache-aware refresh behaviour over hard-coded keys so key rotation can happen without service restarts.
- Write policies against verified claims only Reference request.auxData.jwt in policy conditions only after the token has been validated, and avoid trusting decoded claims from application code.
- Treat audience checks as mandatory Enforce aud or an equivalent custom claim alongside signature and expiry so a valid token cannot be reused across the wrong service boundary.
Key takeaways
- Native JWT verification moves trust closer to the authorization decision, which reduces duplicate parsing and policy drift across services.
- The main risk is not JWT syntax, but fragmented verification practices, stale keys, and inconsistent audience checks.
- IAM teams should treat verified claims, JWKS refresh, and issuer trust as governed controls rather than application details.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP Non-Human Identity Top 10 and OWASP API Security Top 10 address the attack and risk surface, while NIST SP 800-53 Rev 5 and NIST CSF 2.0 set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| OWASP Non-Human Identity Top 10 | NHI-04 — Insecure Authentication | JWT verification governs whether bearer tokens are trusted as authentic identity evidence. |
| NHI-07 — Long-Lived Secrets | Static or stale signing keys extend the life of compromised token trust material. | |
| Recommendation — Verify token signature, issuer, audience, and expiry before using JWT claims in policy decisions. Rotate signing keys through JWKS and retire stale key material without relying on application restarts. | ||
| NIST SP 800-53 Rev 5 | IA-5 — Authenticator Management | JWT signing keys and token validation fit authenticator lifecycle governance. |
| Recommendation — Manage JWT signing material under IA-5 so validation, rotation, and revocation stay controlled. | ||
| NIST CSF 2.0 | PR.AA-05 — Access Permissions, Entitlements and Authorizations | Claim-based policy checks determine whether a request is authorised to proceed. |
| Recommendation — Apply PR.AA-05 to ensure only verified claims drive authorization decisions. | ||
| OWASP API Security Top 10 | API2 — Broken Authentication | Tokens used inconsistently across services can produce authentication weaknesses at the API boundary. |
| Recommendation — Validate bearer tokens consistently at API ingress and prevent services from trusting decoded claims alone. | ||
Key terms
- Bearer Token: A bearer token is a credential that grants access to whoever possesses it, without requiring strong proof that the holder is the intended client. In NHI environments, that makes theft and replay the main risk, especially when tokens are long-lived, broadly scoped, or stored in local files.
- JWKS: A JWKS, or JSON Web Key Set, is a machine-readable publishing format for public keys used by clients to verify signatures or encrypt tokens. It lets consumers fetch current key material automatically instead of relying on manual distribution, which is critical when keys rotate on a schedule.
- JWT Claim: A JWT claim is a piece of information carried inside a JSON Web Token. It is a named statement about the subject, issuer, audience, timing, or other context, and it helps a system decide whether to trust and accept the token. Claims can be standard, public, or private, and they are digitally signed or sometimes encrypted within the token.
- Policy Drift Detection: Policy drift detection is the process of identifying when an access policy no longer matches the intended rule or the current business context. It helps teams catch unauthorized changes, stale permissions, and exceptions that have quietly become the new normal, so governance stays aligned with actual identity and app usage.
Deepen your knowledge
NHI governance, agentic AI identity, and machine identity lifecycle are core topics in our NHI Foundation Level course, the industry's only accredited NHI security programme. If you are responsible for identity security strategy or NHI governance in your organisation, it is worth exploring.
Published by the NHIMG editorial team on June 11, 2026.
Updated on October 6, 2026.
NHI Mgmt Group, the independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org