Skip to content
On this page

A server application needs to prove which client it is before receiving tokens. Choosing that proof affects key rotation, ingress configuration and the API’s token-validation work.

ProAuth shipped JWT-based and mutual TLS client authentication in 3.0.0. This follow-up to the June preview describes the client-authentication and token-binding choices shipped in ProAuth 3.0.

Choose the proof your team can operate

MethodClient proofOperational responsibility
private_key_jwtSigned assertion from an asymmetric client keyProtect private keys and register public validation keys
client_secret_jwtAssertion signed with a shared client secretDistribute and rotate the shared secret securely
tls_client_authTLS client certificate validated against configured identity metadataManage certificate trust, matching and renewal
self_signed_tls_client_authTLS client certificate whose public key matches registered keysRegister keys and plan overlap during rotation

JWT authentication is documented in the JWT client authentication guide; certificate methods are covered by the mTLS guide. A JWT assertion is not the same artifact as a JWT access token, and client_secret_jwt is not asymmetric authentication.

Separate client authentication from token binding

Client authentication answers which registered application is making a token request. Sender constraint answers whether the caller presenting a token also possesses its associated key or certificate.

flowchart TD
    Request[Confidential client requests a token] --> Auth[ProAuth validates registered client authentication]
    Auth --> Binding[Apply configured DPoP or certificate binding]
    Binding --> Token[Issue access token]
    Token --> API[Resource server checks token and required possession proof]

With certificate-bound access tokens, the resource server compares the presented certificate’s SHA-256 thumbprint with cnf.x5t#S256 from the token or introspection response. Trusting a token signature without checking the certificate does not enforce that binding.

ProAuth’s mTLS documentation distinguishes token-endpoint-issued certificate-bound access tokens from refresh tokens, which are not certificate-bound. An mTLS client still authenticates with its configured certificate on refresh. Keep those statements separate in architecture reviews.

Ingress is part of the mTLS design

Direct TLS certificates and forwarded certificate headers have different trust boundaries. ProAuth disables certificate forwarding by default. Where ingress terminates mutual TLS, explicitly configure the trusted proxy addresses or networks, strip untrusted incoming certificate headers and let the trusted proxy supply the validated certificate.

An arbitrary forwarded header is not evidence of possession. Include a spoofed-header test in the deployment review, along with certificate renewal and overlap. RFC 8705 defines OAuth mutual TLS authentication and certificate-bound access tokens.

Register the method on both sides

Make the application and ProAuth registration agree on the intended authentication method. PKCE, request signatures and sender-constrained access tokens have different jobs from confidential-client authentication. Test PAR as well as token redemption where the application uses both endpoints.

Include the actual client library in the acceptance test. Check the method it sends, the keys or certificates it uses, and behavior during rotation. The 3.0 release notes establish the supported client-authentication capabilities; use the linked configuration guides for the individual methods.

Choose the method with the clearest ownership: who provisions keys, who rotates them, who owns the proxy trust boundary, and who verifies possession at the API. A stronger proof is useful only when its full lifecycle is maintained.

Image detail