A 16-year-old researcher recently accessed approximately 17.3 trillion database rows in Microsoft's internal analytics service. The vulnerability wasn't a sophisticated exploit. The service simply didn't verify the cryptographic signature on JSON Web Tokens (JWTs).
Your authentication layer likely processes JWTs. This guide helps you determine whether your current JWT validation approach protects against identity spoofing or exposes your system.
The Decision You're Facing
You're implementing or auditing an authentication system using JWTs. You must decide: do you verify only the claims inside the token, or do you also verify the cryptographic signature that proves who issued it?
This isn't a theoretical choice. The Microsoft incident shows what happens when you validate claims without proving the token's origin. An attacker who controls the claims without proving issuance can bypass every downstream access control you've built.
Key Factors That Affect Your Choice
Token Source
Where do your JWTs originate? If they come from your own identity provider and never cross trust boundaries, you control the signing keys. If they arrive from external identity providers, federated systems, or third-party APIs, you're trusting another entity's signing process.
Attack Surface
Is your API publicly reachable, or does it sit behind a VPN? The Microsoft service was internal, yet still vulnerable. VPN access and network segmentation don't eliminate the need for cryptographic verification; they just reduce the pool of potential attackers.
Downstream Trust
What happens after authentication? If your system makes authorization decisions, queries databases, or accesses restricted resources based on claims in the JWT, unsigned tokens let attackers impersonate any identity they choose.
Compliance Requirements
GDPR Article 32 requires Technical and Organisational Measures appropriate to the risk, including measures to ensure confidentiality and integrity. If your system processes personal data, failing to verify JWT signatures likely violates this requirement.
Path A: Full Cryptographic Verification (Default Choice)
Choose this when:
- Your system processes personal or restricted data
- JWTs arrive from any external source
- Your API is reachable from outside your direct control
- Authorization decisions depend on claims in the token
- You're building a new authentication layer
Implementation requirements:
- Retrieve the public key from your identity provider's JWKS endpoint
- Verify the signature using the appropriate algorithm (RS256, ES256)
- Reject any token with an invalid or missing signature before reading claims
- Validate claims only after signature verification succeeds
- Implement key rotation: cache public keys but refresh them periodically
Why this path:
Signature verification proves the token came from your identity provider and hasn't been tampered with. Without it, an attacker can craft a token claiming to be anyone, including administrators, and your system will trust it. The Microsoft incident showed exactly this: the service validated tenant, audience, and application claims, but because it didn't verify the signature, those checks provided no protection.
This is fail-closed authentication. If verification fails, access stops.
Path B: Claims-Only Validation (High-Risk Exception)
Choose this when:
- You're working with legacy systems that can't be modified
- You're implementing a temporary workaround during migration
- The system doesn't process personal or restricted data
- You've documented the risk and accepted it formally
Mandatory compensating controls:
- Network isolation: restrict API access to a single, monitored network segment
- Break-glass access logging: record every authentication attempt with full token contents
- Anomaly detection: alert on unusual claim patterns or tenant mismatches
- Time-bound exception: set a concrete deadline for implementing full verification
- Prior consultation: if you process high-risk personal data, consult your supervisory authority
Why this path rarely works:
You're trusting that network controls will stop attackers from reaching your API. The Microsoft case proves this assumption fails. Even internal analytics services need cryptographic verification because internal access doesn't equal trusted access.
If you choose this path, treat it as technical debt with a defined remediation timeline, not a permanent architecture.
Path C: Hybrid Verification (Temporary Migration State)
Choose this when:
- You're migrating from claims-only to full verification
- You need to validate both old (unsigned) and new (signed) tokens during transition
- You're running parallel authentication systems
Implementation requirements:
- Check for signature presence first
- If signature exists, verify it cryptographically; reject if invalid
- If no signature exists, log a deprecation warning and validate claims only
- Set a cutoff date: after this date, reject all unsigned tokens
- Monitor the ratio of signed to unsigned tokens weekly
Transition timeline:
- Week 1-2: Deploy hybrid verification in monitoring mode
- Week 3-4: Begin rejecting invalid signatures while accepting unsigned tokens
- Week 5-8: Notify clients about upcoming unsigned token deprecation
- Week 9: Reject all unsigned tokens
This path should last weeks, not months. The longer you accept unsigned tokens, the longer you're vulnerable.
Summary Matrix
| Factor | Full Verification | Claims-Only | Hybrid |
|---|---|---|---|
| Security posture | Cryptographically proven identity | Trust without proof | Time-limited compromise |
| GDPR Article 32 compliance | Yes | No (requires compensating controls) | Yes (with cutoff date) |
| Implementation complexity | Moderate (JWKS integration) | Low | High (dual code paths) |
| Appropriate for production | Yes | No | Only during migration |
| Protects against spoofing | Yes | No | After cutoff date |
What the Microsoft Incident Reveals
The researcher used AI for repetitive enumeration and authentication testing, but the breakthrough came from questioning an assumption: how does the application interpret the user identity field? AI accelerated discovery; human reasoning found the flaw.
Your security testing should follow the same pattern. Use automation to test authentication endpoints at scale, but task humans with questioning your fundamental assumptions about trust.
There is currently no evidence that malicious actors exploited the Microsoft vulnerability. That's not a reason to delay verification, it's a reminder that you discover incidents only when someone looks.
Verify JWT signatures. Reject unsigned tokens. Fail closed. The alternative is broadcasting administrator access to anyone who can craft a JSON object.




