<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Does FusionAuth support mTLS token binding?]]></title><description><![CDATA[<p dir="auto">Does FusionAuth support mTLS token binding (RFC 8705, section 3) for the client credentials grant?</p>
<p dir="auto">I found this issue but wasn't sure what the current status is: <a href="https://github.com/FusionAuth/fusionauth-issues/issues/1025" rel="nofollow ugc">https://github.com/FusionAuth/fusionauth-issues/issues/1025</a></p>
]]></description><link>https://fusionauth.io/community/forum/topic/2911/does-fusionauth-support-mtls-token-binding</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 11:53:29 GMT</lastBuildDate><atom:link href="https://fusionauth.io/community/forum/topic/2911.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Apr 2025 16:28:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Does FusionAuth support mTLS token binding? on Sun, 04 May 2025 02:04:33 GMT]]></title><description><![CDATA[<p dir="auto">Hiya,</p>
<p dir="auto">There are currently no plans to support the full mTLS spec. We are discussing DPoP (<a href="https://github.com/FusionAuth/fusionauth-issues/issues/1679" rel="nofollow ugc">tracking issue</a>) internally.</p>
<p dir="auto">However, depending on your needs, there may be a workaround.</p>
<p dir="auto">Since the client credentials grant <a href="https://fusionauth.io/docs/get-started/core-concepts/entity-management" rel="nofollow ugc">depends on Entities</a>, you can leverage this to inject a client certificate hash into an access token obtained through the client credentials grant.</p>
<p dir="auto">How this works at a high level:</p>
<ul>
<li>Client Certificate Registration<br />
During onboarding, your customer (e.g., a bank) registers their client certificate. A hashed value of that certificate is securely stored in FusionAuth (entity.data). The hashing process is <a href="https://datatracker.ietf.org/doc/html/rfc8705#section-3.1" rel="nofollow ugc">outlined in the RFC</a>.</li>
<li>Client Credentials Request<br />
When the bank requests an access token using the Client Credentials grant, a <a href="https://fusionauth.io/docs/extend/code/lambdas/client-credentials-jwt-populate" rel="nofollow ugc">FusionAuth Lambda</a> is invoked before the JWT is signed.</li>
<li>Augment Custom Claims<br />
The Lambda code looks up the stored certificate hash and injects it as a claim in the JWT. For maximum compatibility with RFC 8705, it is recommended to add this hash to the <code>cnf</code> object in the JWT, like so:</li>
</ul>
<pre><code>"cnf":{
  "x5t#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg2"
}
</code></pre>
<ul>
<li>Accessing the Resource Server or API<br />
The customer presents both the access token and presents their client certificate when calling your API.</li>
<li>Validation Flow<br />
Your API:
<ul>
<li>verifies the JWT signature</li>
<li>computes a hash of the presented client certificate</li>
<li>compares it to the x5t#S256 claim in the token</li>
</ul>
</li>
<li>Decision Logic<br />
If the hashes match, the request is bound to the correct client and access is granted to the protected resource.</li>
</ul>
]]></description><link>https://fusionauth.io/community/forum/post/7981</link><guid isPermaLink="true">https://fusionauth.io/community/forum/post/7981</guid><dc:creator><![CDATA[dan]]></dc:creator><pubDate>Sun, 04 May 2025 02:04:33 GMT</pubDate></item></channel></rss>