Safeguard
Security Guides•

mTLS or signed tokens between services: a decision guide

A practical comparison of mutual TLS and token-based service authentication, with the operational costs OWASP flags and a short guide to choosing.

Safeguard Security Team
3 min read

Use mutual TLS when you can run certificate issuance and rotation well, and you want the transport to prove who is calling. Use signed tokens when you need caller claims at the application layer or when proxies break end to end TLS. Many systems use both. Whichever you pick, reject the call when validation cannot finish.

How OWASP frames the choice

The OWASP Microservices Security Cheat Sheet lists two ways for a service to authenticate to its peers.

Mutual TLS: each service holds a key pair and authenticates to peers. The listed challenges are key provisioning, trust bootstrap, revocation and rotation.

Token based: the caller obtains a signed token from a token service and attaches it to each request, and the receiver validates it. Validation is either online or local.

Online or local token validation

Online validation, such as OAuth introspection, adds latency and a dependency on the token service. If you cache results, revocation shows up late, so bound the cache time by how fresh the answer must be.

Local validation uses trusted issuer keys and the right token profile, and checking the signature alone is not enough. The sheet adds that local validation does not catch revocation before expiry unless you use short lifetimes or another revocation mechanism.

A comparison

  1. What it proves: mTLS proves possession of a key for a certificate. A token proves what the issuer says about the caller, which can include audience and scope.
  2. Where it runs: mTLS ends at whatever terminates TLS. A token travels in a header and survives proxies, but then needs TLS to protect it. The sheet says token authentication should run over TLS.
  3. Operations: mTLS needs a certificate authority and automatic rotation. Tokens need a token service, key distribution and short lifetimes.
  4. Failure mode: an expired certificate breaks connections loudly. A validation outage with tokens can quietly become fail-open if coded carelessly.

Choosing

  • Many services, a mesh already in place: mTLS handled by the platform, with authorization by service identity. See service mesh mTLS configuration.
  • Calls cross proxies, queues or third parties: tokens, with audience checks.
  • High value internal APIs: both, so the transport proves the service and the token carries scope.

For the underlying mechanics read mutual TLS for service to service and OAuth and client credentials for service auth.

One rule for both

The sheet says to reject requests when the required token validation cannot be completed. The same goes for a failed certificate check. Never degrade to anonymous.

Safeguard can help here in a small way. Its SBOM and dependency scanning covers the broker client libraries and service frameworks your code pulls in, and reachability analysis shows which advisories your services actually call. You can try a free scan at gold.safeguard.sh/scan.

Quick check

Is mTLS enough on its own?

It authenticates the calling service. You still need authorization on the receiving side to decide what that service may do.

Do tokens need TLS?

Yes. OWASP says token authentication should run over TLS.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.