|
| 1 | + |
| 2 | +<!doctype html> |
| 3 | +<html lang="en" prefix="og: https://ogp.me/ns#"> |
| 4 | +<head> |
| 5 | +<script async src="https://www.googletagmanager.com/gtag/js?id=G-0J2P9316N6"></script> |
| 6 | +<script> |
| 7 | +window.dataLayer = window.dataLayer || []; |
| 8 | +function gtag(){dataLayer.push(arguments);} |
| 9 | +gtag('js', new Date()); |
| 10 | +gtag('config', 'G-0J2P9316N6'); |
| 11 | +</script> |
| 12 | +<meta charset="utf-8"/> |
| 13 | +<title>Standard Token Exchange is now officially supported in Keycloak 26.2 - Keycloak</title> |
| 14 | +<meta name="twitter:card" content="summary_large"> |
| 15 | +<meta name="twitter:site" content="@keycloak"> |
| 16 | +<meta property="og:site_name" content="Keycloak"> |
| 17 | +<meta property="og:title" content="Standard Token Exchange is now officially supported in Keycloak 26.2"> |
| 18 | +<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 19 | +<meta name="description" property="og:description" content="Keycloak 26.2 brings Token Exchange out of preview with an officially supported version compliant with OAuth 2.0 Token Exchange specification."> |
| 20 | +<meta name="author" content="Giuseppe Graziano"> |
| 21 | +<meta name="keywords" content="sso,idm,openid connect,saml,kerberos,ldap"> |
| 22 | +<link href="https://www.keycloak.org/resources/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> |
| 23 | +<link href="https://www.keycloak.org/resources/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet"> |
| 24 | +<link href="https://www.keycloak.org/resources/css/keycloak.css" rel="stylesheet"> |
| 25 | +<link rel="canonical" href="https://www.keycloak.org/2025/05/standard-token-exchange-kc-26-2"> |
| 26 | +<meta property="og:url" content="https://www.keycloak.org/2025/05/standard-token-exchange-kc-26-2"> |
| 27 | +<link rel="shortcut icon" href="https://www.keycloak.org/resources/favicon.ico"> |
| 28 | +<script src="https://www.keycloak.org/resources/bootstrap/dist/js/bootstrap.min.js" type="text/javascript"></script> |
| 29 | +<script src="https://www.keycloak.org/resources/tocbot/dist/tocbot.min.js" type="text/javascript"></script> |
| 30 | +<link rel="alternate" type="application/rss+xml" title="Keycloak's Blog" href="https://www.keycloak.org/rss.xml"> |
| 31 | +<script type="application/ld+json"> |
| 32 | +{"@context":"https://schema.org/","@type":"BlogPosting","@id":"https://www.keycloak.org/2025/05/standard-token-exchange-kc-26-2","headline":"Standard Token Exchange is now officially supported in Keycloak 26.2","name":"Standard Token Exchange is now officially supported in Keycloak 26.2","datePublished":"2025-05-26T08:00:00Z","inLanguage":"en","abstract":"Keycloak 26.2 brings Token Exchange out of preview with an officially supported version compliant with OAuth 2.0 Token Exchange specification.","url":"https://www.keycloak.org/2025/05/standard-token-exchange-kc-26-2","publisher":{"@type":"Organization","@id":"https://keycloak.org","name":"Keycloak"},"author":[{"@type":"Person","name":"Giuseppe Graziano"}]} |
| 33 | +</script></head> |
| 34 | +<body> |
| 35 | + |
| 36 | +<header class="navbar navbar-expand-md bg-light shadow-sm"> |
| 37 | +<nav class="container-xxl flex-wrap flex-md-no-wrap navbar-light" data-nosnippet> |
| 38 | + <a class="navbar-brand me-3 me-md-4 me-lg-5" href="https://www.keycloak.org/"> |
| 39 | + <img class="img-fluid" src="https://www.keycloak.org/resources/images/logo.svg" width="240" alt="Keycloak"/> |
| 40 | + </a> |
| 41 | + <a class="nav-link d-none d-sm-block d-md-none d-lg-block" href="https://github.com/keycloak/keycloak"><img src="https://img.shields.io/github/stars/keycloak/keycloak?label=GitHub%20Stars" style="height: 25px" alt="GitHub stars"/></a> |
| 42 | + <a class="nav-link d-block d-sm-none d-md-block d-lg-none" href="https://github.com/keycloak/keycloak"><img src="https://img.shields.io/github/stars/keycloak/keycloak?label=" style="height: 25px" alt="GitHub stars"/></a> |
| 43 | + <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation"> |
| 44 | + <span class="fa fa-bars fa-lg px-1 py-2"></span> |
| 45 | + </button> |
| 46 | + <div class="collapse navbar-collapse" id="navbarCollapse"> |
| 47 | + <ul class="navbar-nav flex-row flex-wrap bd-navbar-nav pt-2 py-md-0"> |
| 48 | + <li class="nav-item col-6 col-md-auto"> |
| 49 | + <a class="nav-link " href="https://www.keycloak.org/guides">Guides</a> |
| 50 | + </li> |
| 51 | + <li class="nav-item col-6 col-md-auto"> |
| 52 | + <a class="nav-link " href="https://www.keycloak.org/documentation">Docs</a> |
| 53 | + </li> |
| 54 | + <li class="nav-item col-6 col-md-auto"> |
| 55 | + <a class="nav-link " href="https://www.keycloak.org/downloads">Downloads</a> |
| 56 | + </li> |
| 57 | + <li class="nav-item col-6 col-md-auto"> |
| 58 | + <a class="nav-link " href="https://www.keycloak.org/community">Community</a> |
| 59 | + </li> |
| 60 | + <li class="nav-item col-6 col-md-auto"> |
| 61 | + <a class="nav-link " href="https://www.keycloak.org/blog">Blog</a> |
| 62 | + </li> |
| 63 | + </ul> |
| 64 | + </div> |
| 65 | +</nav> |
| 66 | +</header> |
| 67 | + |
| 68 | + |
| 69 | +<div class="container mt-5 kc-article"> |
| 70 | + <h1>Standard Token Exchange is now officially supported in Keycloak 26.2</h1> |
| 71 | + <p class="blog-date text-muted">May 26 2025 by Giuseppe Graziano</p> |
| 72 | + |
| 73 | + |
| 74 | +<div class="paragraph"> |
| 75 | +<p>The Token Exchange feature has been available in Keycloak for a long time, but only as a preview feature. With the release of |
| 76 | +<strong>Keycloak 26.2</strong>, we’re happy to share that <strong>Standard Token Exchange is now officially supported</strong> and fully compliant with <a href="https://datatracker.ietf.org/doc/html/rfc8693">OAuth 2.0 Token Exchange (RFC 8693)</a>.</p> |
| 77 | +</div> |
| 78 | +<div class="sect1"> |
| 79 | +<h2 id="_what_is_token_exchange">What is Token Exchange? 🔄</h2> |
| 80 | +<div class="sectionbody"> |
| 81 | +<div class="paragraph"> |
| 82 | +<p>Token Exchange is a mechanism that allows a client to exchange one token for another. In the context of Keycloak, this means a client can exchange a token originally issued for another client and receive a new token issued specifically for itself.</p> |
| 83 | +</div> |
| 84 | +<div class="paragraph"> |
| 85 | +<p>Token Exchange is especially helpful in these scenarios:</p> |
| 86 | +</div> |
| 87 | +<div class="sect2"> |
| 88 | +<h3 id="_different_audience">🎯 Different Audience</h3> |
| 89 | +<div class="paragraph"> |
| 90 | +<p>When a token was issued for one service but needs to be used to access another, Token Exchange can issue a new token with the appropriate audience.</p> |
| 91 | +</div> |
| 92 | +</div> |
| 93 | +<div class="sect2"> |
| 94 | +<h3 id="_scoped_permissions">🔐 Scoped Permissions</h3> |
| 95 | +<div class="paragraph"> |
| 96 | +<p>If a client needs to access a service with more limited permissions, it can exchange its token for one with reduced or more specific scopes.</p> |
| 97 | +</div> |
| 98 | +</div> |
| 99 | +</div> |
| 100 | +</div> |
| 101 | +<div class="sect1"> |
| 102 | +<h2 id="_whats_new">What’s new? 🆕</h2> |
| 103 | +<div class="sectionbody"> |
| 104 | +<div class="ulist"> |
| 105 | +<ul> |
| 106 | +<li> |
| 107 | +<p>✅ Official support (no longer a preview feature)</p> |
| 108 | +</li> |
| 109 | +<li> |
| 110 | +<p>📘 Compliance with RFC 8693 (OAuth 2.0 Token Exchange)</p> |
| 111 | +</li> |
| 112 | +<li> |
| 113 | +<p>🖱️ Simple configuration via the Admin Console (just a switch in client settings)</p> |
| 114 | +</li> |
| 115 | +<li> |
| 116 | +<p>🛡️ Integration with Client Policies to enforce custom rules. You can restrict exchanges to specific clients, or deny exchanges based on requested scopes.</p> |
| 117 | +</li> |
| 118 | +</ul> |
| 119 | +</div> |
| 120 | +</div> |
| 121 | +</div> |
| 122 | +<div class="sect1"> |
| 123 | +<h2 id="_how_to_get_started">How to get started 🚀</h2> |
| 124 | +<div class="sectionbody"> |
| 125 | +<div class="paragraph"> |
| 126 | +<p>If you’re using Keycloak 26.2 or later, there’s nothing extra to enable. Token Exchange is ready to use, just open the client settings in the admin console and enable the dedicated switch.</p> |
| 127 | +</div> |
| 128 | +<div class="paragraph"> |
| 129 | +<p>If you’re still using the preview feature of token exchange, check the <a href="https://www.keycloak.org/docs/latest/upgrading/index.html#supported-standard-token-exchange">migration guide</a> and the <a href="https://www.keycloak.org/securing-apps/token-exchange#_standard-token-exchange-comparison">comparison</a> to understand the differences and plan your migration.</p> |
| 130 | +</div> |
| 131 | +<div class="paragraph"> |
| 132 | +<p>📄 For full setup instructions and configuration details, refer to the <a href="https://www.keycloak.org/securing-apps/token-exchange#_standard-token-exchange">official documentation</a>.</p> |
| 133 | +</div> |
| 134 | +</div> |
| 135 | +</div> |
| 136 | +<div class="sect1"> |
| 137 | +<h2 id="_whats_next">What’s next? 🔍</h2> |
| 138 | +<div class="sectionbody"> |
| 139 | +<div class="paragraph"> |
| 140 | +<p>We’re continuing to expand Token Exchange support with future enhancements such as:</p> |
| 141 | +</div> |
| 142 | +<div class="ulist"> |
| 143 | +<ul> |
| 144 | +<li> |
| 145 | +<p>🔄 Exchanging tokens issued by external identity providers</p> |
| 146 | +</li> |
| 147 | +<li> |
| 148 | +<p>👤 Using token exchange to impersonate users</p> |
| 149 | +</li> |
| 150 | +</ul> |
| 151 | +</div> |
| 152 | +<div class="paragraph"> |
| 153 | +<p>Stay tuned for updates in upcoming releases.</p> |
| 154 | +</div> |
| 155 | +<hr> |
| 156 | +<div class="paragraph"> |
| 157 | +<p>We’d love to hear what you think about this feature and how we can improve it. Feedback and contributions from the community are always welcome.</p> |
| 158 | +</div> |
| 159 | +</div> |
| 160 | +</div></div> |
| 161 | + |
| 162 | + |
| 163 | +<div class="container mt-5" data-nosnippet> |
| 164 | + <footer class="py-3 my-4 border-top"> |
| 165 | + <p class="text-center text-muted">Keycloak is a Cloud Native Computing Foundation incubation project</p> |
| 166 | + <div class="text-center"> |
| 167 | + <img alt="Cloud Native Computing Foundation" src="https://www.keycloak.org/resources/images/cncf_logo.png"/> |
| 168 | + </div> |
| 169 | + <p class="mt-4 text-center small text-muted">© Keycloak Authors 2025. © 2025 The Linux Foundation. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our <a href="https://www.linuxfoundation.org/trademark-usage">Trademark Usage page</a>.</p> |
| 170 | + </footer> |
| 171 | +</div> |
| 172 | + |
| 173 | +</body> |
| 174 | +</html> |
0 commit comments