CINXE.COM
Custom extensions on Keycloack | Cloud-IAM | DOCS
<!DOCTYPE html> <html lang="en-US" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Custom extensions on Keycloack | Cloud-IAM | DOCS</title> <meta name="description" content="What is a custom extension on Keycloak. How to add a custom extensions on your Managed Keycloak by Cloud-IAM via console or API."> <link rel="preload stylesheet" href="/assets/style.38766cc5.css" as="style"> <script type="module" src="/assets/app.e81cff2e.js"></script> <link rel="preload" href="/assets/inter-roman-latin.2ed14f66.woff2" as="font" type="font/woff2" crossorigin=""> <link rel="modulepreload" href="/assets/chunks/framework.385ac4c3.js"> <link rel="modulepreload" href="/assets/chunks/theme.7cadd7f5.js"> <link rel="modulepreload" href="/assets/how-to-guides_custom-extensions.md.e02afdda.lean.js"> <script async src="https://cdn.matomo.cloud/cloudiam.matomo.cloud/container_Bz2B6ya0.js"></script> <script>var _mtm=window._mtm=window._mtm||[];_mtm.push({"mtm.startTime":new Date().getTime(),event:"mtm.Start"});</script> <script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script> <meta name="keywords" content="Custom extensions on your Keycloak powered by Cloud-IAM, how to implement via console, API, SPI, service provider interfaces,"> </head> <body> <div id="app"><div class="Layout" data-v-4064354f><!--[--><!--]--><!--[--><span tabindex="-1" data-v-c8291ffa></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-c8291ffa> Skip to content </a><!--]--><!----><header class="VPNav" data-v-4064354f data-v-5bdc5df3><div class="VPNavBar has-sidebar" data-v-5bdc5df3 data-v-f1abbc6e><div class="container" data-v-f1abbc6e><div class="title" data-v-f1abbc6e><div class="VPNavBarTitle has-sidebar" data-v-f1abbc6e data-v-2973dbb4><a class="title" href="/" data-v-2973dbb4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.svg" alt data-v-ab19afbb><!--]--><!--[-->Cloud-IAM | DOCS<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-f1abbc6e><div class="curtain" data-v-f1abbc6e></div><div class="content-body" data-v-f1abbc6e><!--[--><!--]--><div class="VPNavBarSearch search" style="--vp-meta-key:'Meta';" data-v-f1abbc6e><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg class="DocSearch-Search-Icon" width="20" height="20" viewBox="0 0 20 20" aria-label="search icon"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><!----><!----><div class="VPNavBarAppearance appearance" data-v-f1abbc6e data-v-5e9f0637><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-5e9f0637 data-v-3329432d data-v-1c29e291><span class="check" data-v-1c29e291><span class="icon" data-v-1c29e291><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-3329432d><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-3329432d><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-f1abbc6e data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://twitter.com/cloud_iam_com" aria-label="twitter" target="_blank" rel="noopener" data-v-e71e869c data-v-16cf740a><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M21.543 7.104c.015.211.015.423.015.636 0 6.507-4.954 14.01-14.01 14.01v-.003A13.94 13.94 0 0 1 0 19.539a9.88 9.88 0 0 0 7.287-2.041 4.93 4.93 0 0 1-4.6-3.42 4.916 4.916 0 0 0 2.223-.084A4.926 4.926 0 0 1 .96 9.167v-.062a4.887 4.887 0 0 0 2.235.616A4.928 4.928 0 0 1 1.67 3.148 13.98 13.98 0 0 0 11.82 8.292a4.929 4.929 0 0 1 8.39-4.49 9.868 9.868 0 0 0 3.128-1.196 4.941 4.941 0 0 1-2.165 2.724A9.828 9.828 0 0 0 24 4.555a10.019 10.019 0 0 1-2.457 2.549z"/></svg></a><a class="VPSocialLink no-icon" href="https://www.linkedin.com/company/cloudiam/" aria-label="linkedin" target="_blank" rel="noopener" data-v-e71e869c data-v-16cf740a><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>LinkedIn</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-f1abbc6e data-v-c8c2ae4b data-v-aa8de344><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-aa8de344><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-aa8de344><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-aa8de344><div class="VPMenu" data-v-aa8de344 data-v-e42ed9b3><!----><!--[--><!--[--><!----><div class="group" data-v-c8c2ae4b><div class="item appearance" data-v-c8c2ae4b><p class="label" data-v-c8c2ae4b>Appearance</p><div class="appearance-action" data-v-c8c2ae4b><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-c8c2ae4b data-v-3329432d data-v-1c29e291><span class="check" data-v-1c29e291><span class="icon" data-v-1c29e291><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-3329432d><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-3329432d><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div></div></div><div class="group" data-v-c8c2ae4b><div class="item social-links" data-v-c8c2ae4b><div class="VPSocialLinks social-links-list" data-v-c8c2ae4b data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://twitter.com/cloud_iam_com" aria-label="twitter" target="_blank" rel="noopener" data-v-e71e869c data-v-16cf740a><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M21.543 7.104c.015.211.015.423.015.636 0 6.507-4.954 14.01-14.01 14.01v-.003A13.94 13.94 0 0 1 0 19.539a9.88 9.88 0 0 0 7.287-2.041 4.93 4.93 0 0 1-4.6-3.42 4.916 4.916 0 0 0 2.223-.084A4.926 4.926 0 0 1 .96 9.167v-.062a4.887 4.887 0 0 0 2.235.616A4.928 4.928 0 0 1 1.67 3.148 13.98 13.98 0 0 0 11.82 8.292a4.929 4.929 0 0 1 8.39-4.49 9.868 9.868 0 0 0 3.128-1.196 4.941 4.941 0 0 1-2.165 2.724A9.828 9.828 0 0 0 24 4.555a10.019 10.019 0 0 1-2.457 2.549z"/></svg></a><a class="VPSocialLink no-icon" href="https://www.linkedin.com/company/cloudiam/" aria-label="linkedin" target="_blank" rel="noopener" data-v-e71e869c data-v-16cf740a><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>LinkedIn</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-f1abbc6e data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav reached-top" data-v-4064354f data-v-9e669cc1><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-9e669cc1><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-9e669cc1><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-9e669cc1>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-9e669cc1 data-v-24251f6f><button data-v-24251f6f>Return to top</button><!----></div></div><aside class="VPSidebar" data-v-4064354f data-v-ee2efba5><div class="curtain" data-v-ee2efba5></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-ee2efba5><span class="visually-hidden" id="sidebar-aria-label" data-v-ee2efba5> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-ee2efba5><section class="VPSidebarItem level-0" data-v-ee2efba5 data-v-bd01e0d5><!----><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link vp-external-link-icon link" href="https://www.cloud-iam.com/?mtm_campaign=trk-doc-site" target="_blank" rel="noreferrer" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Go to cloud-iam.com 🌐</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Welcome 👋</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-ee2efba5><section class="VPSidebarItem level-0 collapsible" data-v-ee2efba5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h2 class="text" data-v-bd01e0d5>Get started</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/get-started/access-to-cloud-iam-app.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Access to Cloud-IAM App</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/get-started/deploy-my-keycloak.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Deploy my Managed Keycloak</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/get-started/console-overview.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Console overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/get-started/migrate-to-cloud-iam.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Migrate to Cloud-IAM</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-ee2efba5><section class="VPSidebarItem level-0 collapsible has-active" data-v-ee2efba5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h2 class="text" data-v-bd01e0d5>How-to guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><section class="VPSidebarItem level-1 collapsible collapsed" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>Audit / Observability</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/audit-logs.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Audits</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/exports-imports.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Export / Import</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/insights.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Insights</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>Configuration</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/service-account.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Service account & API</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/organization-configurations.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Organization configurations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/third-party-resources.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>3rd party resources</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/smtp.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Configure SMTP</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/configure-mTLS.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>mTLS</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/multitenant-with-keycloak.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Multitenant organization</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/configure-remote-jkws.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Remote JKWS</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/impersonate.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Impersonate</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/basic-auth-w-spring-boot-3.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Basic auth (Spring Boot 3)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/deletion.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Deletion</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible has-active" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>Customization</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/themes.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Themes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/custom-domain.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Setup custom domain</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/custom-extensions.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Custom extensions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/experimental-features.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Experimental features</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/environment-variables.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Environment variables</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>Security</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/security-best-practices.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Best practices</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/allow-deny-lists.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Allow lists</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/how-to-guides/two-factors-authentication.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Two-factor authentication</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="group" data-v-ee2efba5><section class="VPSidebarItem level-0 collapsible collapsed" data-v-ee2efba5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h2 class="text" data-v-bd01e0d5>Cloud-IAM References</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><section class="VPSidebarItem level-1 collapsible collapsed" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>Business continuity</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/architecture-insights.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Architecture insights</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/disaster-recovery.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Disaster recovery</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/monitoring-and-incident-detection.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Monitoring and incident detection</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/keycloak-upgrades.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Keycloak upgrades</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/maintenance-window.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Maintenance window</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/restart-keycloak.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Restart your Keycloak</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/status-page.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Status page</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>App features</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/organization.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Organization role</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/automation.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Automation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/api-automation.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>API Automation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2" data-v-bd01e0d5 data-v-bd01e0d5><!----><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>SaaS Product</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/product.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/plans.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Plans</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/cloud-providers.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Cloud providers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/billing.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Billing</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>Security & compliance</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/data-processing-agreement.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>DPA</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/gdpr-subprocessor.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>GDPR subprocessor</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/iso27001.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>ISO 27001:2022</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/raci.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>RACI</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/service-level-agreement.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>SLA</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/security.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Security</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/terms-of-service.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Terms of service</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>Support teams</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/support-overview.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/technical-team.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Technical support team</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/on-call-team.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>On-call team</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/references/consulting-services.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Keycloak consulting services</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="group" data-v-ee2efba5><section class="VPSidebarItem level-0 collapsible collapsed" data-v-ee2efba5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h2 class="text" data-v-bd01e0d5>Keycloak Resources</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/resources/keycloak-overview.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Keycloak overview</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 collapsible collapsed" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h3 class="text" data-v-bd01e0d5>Keycloak authentications</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/resources/keycloak-authentications/overview.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/resources/keycloak-authentications/simple-login-password.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Simple login password</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/resources/keycloak-authentications/social-login.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Social login</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/resources/keycloak-authentications/passwordless-webauthn.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Passwordless with WebAuthn</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/resources/keycloak-authentications/one-time-password.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Email or SMS OTP</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/resources/keycloak-authentications/magic-links.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Magic links</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/resources/keycloak-authentications/identity-provider-oidc.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Identity Provider (OIDC)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/resources/keycloak-authentications/mfa.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Multi-factor authentication</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="group" data-v-ee2efba5><section class="VPSidebarItem level-0 collapsible collapsed" data-v-ee2efba5 data-v-bd01e0d5><div class="item" role="button" tabindex="0" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><h2 class="text" data-v-bd01e0d5>FAQ</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-bd01e0d5><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-bd01e0d5><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-bd01e0d5><!--[--><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/billing.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Billing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/cloud-provider.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Cloud-provider</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/customization.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Customization</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/keycloak.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Keycloak</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/plan.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Plan</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/product.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Product</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/realms.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Realms</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/rolling-upgrade.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Rolling upgrades</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/users-management.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Users management</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-bd01e0d5 data-v-bd01e0d5><div class="item" data-v-bd01e0d5><div class="indicator" data-v-bd01e0d5></div><a class="VPLink link link" href="/faq/migrate-off.html" data-v-bd01e0d5><!--[--><p class="text" data-v-bd01e0d5>Migrate off Cloud-IAM</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-4064354f data-v-3cf691b6><div class="VPDoc has-sidebar has-aside" data-v-3cf691b6 data-v-a3c25e27><!--[--><!--]--><div class="container" data-v-a3c25e27><div class="aside" data-v-a3c25e27><div class="aside-curtain" data-v-a3c25e27></div><div class="aside-container" data-v-a3c25e27><div class="aside-content" data-v-a3c25e27><div class="VPDocAside" data-v-a3c25e27 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" role="navigation" data-v-cb998dce data-v-626d8d18><div class="content" data-v-626d8d18><div class="outline-marker" data-v-626d8d18></div><div class="outline-title" role="heading" data-v-626d8d18>On this page</div><nav aria-labelledby="doc-outline-aria-label" data-v-626d8d18><span class="visually-hidden" id="doc-outline-aria-label" data-v-626d8d18> Table of Contents for current page </span><ul class="root" data-v-626d8d18 data-v-463da30f><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-a3c25e27><div class="content-container" data-v-a3c25e27><!--[--><!--]--><!----><main class="main" data-v-a3c25e27><div style="position:relative;" class="vp-doc _how-to-guides_custom-extensions" data-v-a3c25e27><div><h1 id="custom-extensions-on-keycloak" tabindex="-1">Custom extensions on Keycloak <a class="header-anchor" href="#custom-extensions-on-keycloak" aria-label="Permalink to "Custom extensions on Keycloak""></a></h1><p>While Keycloak is designed to address most use cases out-of-the-box, there may be instances where its default functionality doesn't fully meet your specific requirements.</p><p>This is where custom extensions come in, allowing you to tailor Keycloak to your exact needs and bridge any gaps.</p><h2 id="definition-of-a-custom-extension-on-keycloak" tabindex="-1">Definition of a custom extension on Keycloak <a class="header-anchor" href="#definition-of-a-custom-extension-on-keycloak" aria-label="Permalink to "Definition of a custom extension on Keycloak""></a></h2><p>A custom extension in Keycloak refers to a customized implementation of a specific functionality or feature within the Keycloak platform. This can be achieved by creating a custom provider that plugs into one of Keycloak's <a href="https://www.keycloak.org/docs/latest/server_development/#_providers" target="_blank" rel="noreferrer">Service Provider Interfaces (SPI)</a>.</p><p>Custom extensions allow you to modify or extend Keycloak's behavior, adding new features or modifying existing ones to suit your specific use case. These extensions can be implemented in Java and packaged as JAR files, which can then be deployed to a Keycloak instance.</p><p>Here are some examples of custom extensions that leverage Keycloak's Service Provider Interfaces (SPIs):</p><ul><li><strong>Custom login flows</strong>: Implementing a custom login flow that integrates with an external authentication system.</li><li><strong>Custom authenticators</strong>: Creating a custom authenticator that verifies user credentials against an external source.</li><li><strong>Custom authorization providers</strong>: Implementing a custom authorization provider that checks user permissions against an external system.</li><li><strong>Custom theme implementations</strong>: Creating a <a href="./themes.html">custom theme</a> for the Keycloak UI to match your organization's brand and style.</li></ul><p>By creating custom extensions, you can tailor Keycloak to your specific needs, providing a high degree of customization and flexibility within the platform.</p><h2 id="implementing-your-custom-extension-on-cloud-iam" tabindex="-1">Implementing your custom extension on Cloud-IAM <a class="header-anchor" href="#implementing-your-custom-extension-on-cloud-iam" aria-label="Permalink to "Implementing your custom extension on Cloud-IAM""></a></h2><p>Once you have subscribed to a paid plan (Little Bunny plan and above) Cloud-IAM allows you to integrate and deploy your custom extension on your Managed Keycloak.</p><p>To upload your custom extension, you have the following options.</p><h3 id="upload-your-custom-extension-via-cloud-iam-console" tabindex="-1">Upload your custom extension via Cloud-IAM console <a class="header-anchor" href="#upload-your-custom-extension-via-cloud-iam-console" aria-label="Permalink to "Upload your custom extension via Cloud-IAM console""></a></h3><p>It is possible to upload your custom extension in Java and packaged as JAR files directly from the Cloud-IAM console. To proceed, you must benefit from the 'Editor' role, more information on the roles <a href="./../references/organization.html#roles">here</a>.</p><ol><li><a href="./../get-started/access-to-cloud-iam-app.html#connect-to-cloud-iam">Connect to Cloud IAM</a> console</li><li>Select the deployment that should receive the custom extension</li><li>Scroll down to category 'Custom Extensions (jar)'</li><li>Click on <code>Upload .jar file</code></li><li>Choose the .jar file to upload</li><li>Upload it</li></ol><p>You have now uploaded your custom extension on your deployment.</p><p>Please note that it may take a few minutes for this import to be completely installed on your Keycloak deployment.</p><figure><img src="/assets/upload-custom-extension-console.9a4d8270.png" alt="Cloud-IAM Console - Upload Custom Extension"><figcaption>Cloud-IAM Console - Upload Custom Extension</figcaption></figure><h3 id="upload-your-custom-extension-via-cloud-iam-api" tabindex="-1">Upload your custom extension via Cloud-IAM API <a class="header-anchor" href="#upload-your-custom-extension-via-cloud-iam-api" aria-label="Permalink to "Upload your custom extension via Cloud-IAM API""></a></h3><p>It is possible to upload custom extensions through <a href="./../references/api-automation.html">Cloud-IAM API</a> to automatise it through your CI/CD pipelines.</p><h4 id="copy-your-deployment-id" tabindex="-1">Copy your deployment ID <a class="header-anchor" href="#copy-your-deployment-id" aria-label="Permalink to "Copy your deployment ID""></a></h4><ol><li><a href="./../get-started/access-to-cloud-iam-app.html#connect-to-cloud-iam">Connect to Cloud IAM</a> console</li><li>Select the deployment that should receive the custom extension</li><li>Extract your deployment ID by clicking on your deployment name (1.)</li></ol><figure><img src="/assets/cloud-iam-console-deployment-id.9a10696f.png" alt="Get the deployment id"><figcaption>Get the deployment id</figcaption></figure><h4 id="build-and-execute-the-api" tabindex="-1">Build and Execute the API <a class="header-anchor" href="#build-and-execute-the-api" aria-label="Permalink to "Build and Execute the API""></a></h4><ol><li>Build your custom extension (<em>for the example extension is available in <code>/home/user/projects/cloud-iam/extension/target/extension.jar</code></em>)</li><li>Get token from <a href="./service-account.html#get-token-from-service-account">service account</a></li><li>Indicate your <code>token</code>, <code>deployment ID</code> and the <code>location</code> on this command and execute it.</li></ol><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#E1E4E8;">DEPLOYMENT_ID</span><span style="color:#F97583;">=</span><span style="color:#9ECBFF;">xxxxx</span></span> <span class="line"><span style="color:#B392F0;">curl</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">-X</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">POST</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">-F</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">extension=@/home/user/projects/cloud-iam/extension/target/extension.jar</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">\</span></span> <span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">-H</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">"Authorization: Bearer </span><span style="color:#E1E4E8;">$TOKEN</span><span style="color:#9ECBFF;">"</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">\</span></span> <span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">https://api.cloud-iam.com/deployments/</span><span style="color:#E1E4E8;">${DEPLOYMENT_ID}</span><span style="color:#9ECBFF;">/extensions/jars</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292E;">DEPLOYMENT_ID</span><span style="color:#D73A49;">=</span><span style="color:#032F62;">xxxxx</span></span> <span class="line"><span style="color:#6F42C1;">curl</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">-X</span><span style="color:#24292E;"> </span><span style="color:#032F62;">POST</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">-F</span><span style="color:#24292E;"> </span><span style="color:#032F62;">extension=@/home/user/projects/cloud-iam/extension/target/extension.jar</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">\</span></span> <span class="line"><span style="color:#24292E;"> </span><span style="color:#005CC5;">-H</span><span style="color:#24292E;"> </span><span style="color:#032F62;">"Authorization: Bearer </span><span style="color:#24292E;">$TOKEN</span><span style="color:#032F62;">"</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">\</span></span> <span class="line"><span style="color:#24292E;"> </span><span style="color:#032F62;">https://api.cloud-iam.com/deployments/</span><span style="color:#24292E;">${DEPLOYMENT_ID}</span><span style="color:#032F62;">/extensions/jars</span></span></code></pre></div><p>This will create a new resource attached to the deployment and will trigger automatically the deployment of the extension on the cluster.</p><p>During this period, no further interaction with the deployment are possible.</p><div class="tip custom-block"><p class="custom-block-title">TIP - To batch the upload of multiple</p><p>If you need to batch the upload of multiple extension before re-deploying it, simply add <code>?apply=false</code> at the end of the url to skip the automatic redeployment.</p><p>Once you are ready with the configuration / upload of extensions, call the following url to eventually apply all the changes.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#E1E4E8;">DEPLOYMENT_ID</span><span style="color:#F97583;">=</span><span style="color:#9ECBFF;">xxxxx</span></span> <span class="line"><span style="color:#B392F0;">curl</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">-X</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">POST</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">-F</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">content=@/home/user/projects/cloud-iam/extension/target/extension.jar</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">\</span></span> <span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">-H</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">"Authorization: Bearer </span><span style="color:#E1E4E8;">$TOKEN</span><span style="color:#9ECBFF;">"</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">\</span></span> <span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">https://api.cloud-iam.com/deployments/</span><span style="color:#E1E4E8;">${DEPLOYMENT_ID}</span><span style="color:#9ECBFF;">/tasks/deploy</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292E;">DEPLOYMENT_ID</span><span style="color:#D73A49;">=</span><span style="color:#032F62;">xxxxx</span></span> <span class="line"><span style="color:#6F42C1;">curl</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">-X</span><span style="color:#24292E;"> </span><span style="color:#032F62;">POST</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">-F</span><span style="color:#24292E;"> </span><span style="color:#032F62;">content=@/home/user/projects/cloud-iam/extension/target/extension.jar</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">\</span></span> <span class="line"><span style="color:#24292E;"> </span><span style="color:#005CC5;">-H</span><span style="color:#24292E;"> </span><span style="color:#032F62;">"Authorization: Bearer </span><span style="color:#24292E;">$TOKEN</span><span style="color:#032F62;">"</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">\</span></span> <span class="line"><span style="color:#24292E;"> </span><span style="color:#032F62;">https://api.cloud-iam.com/deployments/</span><span style="color:#24292E;">${DEPLOYMENT_ID}</span><span style="color:#032F62;">/tasks/deploy</span></span></code></pre></div></div><div class="warning custom-block"><p class="custom-block-title">TIP - For legacy systems</p><p>A common requirement, especially when legacy systems are involved, is to integrate users from those systems into your Keycloak deployment. <code>form 'extension=@example.jar'</code></p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#B392F0;">$</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">curl</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">--location</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">--request</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">POST</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">'https://api.cloud-iam.com/deployments/$DEPLOYMENT_ID/extensions/jars'</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">\</span></span> <span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">--header</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">'Authorization: Bearer $ACCESS_TOKEN'</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">\</span></span> <span class="line"><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">--form</span><span style="color:#E1E4E8;"> </span><span style="color:#9ECBFF;">'extension=@example.jar'</span><span style="color:#E1E4E8;"> </span><span style="color:#79B8FF;">\</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#6F42C1;">$</span><span style="color:#24292E;"> </span><span style="color:#032F62;">curl</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">--location</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">--request</span><span style="color:#24292E;"> </span><span style="color:#032F62;">POST</span><span style="color:#24292E;"> </span><span style="color:#032F62;">'https://api.cloud-iam.com/deployments/$DEPLOYMENT_ID/extensions/jars'</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">\</span></span> <span class="line"><span style="color:#24292E;"> </span><span style="color:#005CC5;">--header</span><span style="color:#24292E;"> </span><span style="color:#032F62;">'Authorization: Bearer $ACCESS_TOKEN'</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">\</span></span> <span class="line"><span style="color:#24292E;"> </span><span style="color:#005CC5;">--form</span><span style="color:#24292E;"> </span><span style="color:#032F62;">'extension=@example.jar'</span><span style="color:#24292E;"> </span><span style="color:#005CC5;">\</span></span></code></pre></div></div><h2 id="update-your-custom-extension-on-cloud-iam" tabindex="-1">Update your custom extension on Cloud-IAM <a class="header-anchor" href="#update-your-custom-extension-on-cloud-iam" aria-label="Permalink to "Update your custom extension on Cloud-IAM""></a></h2><h3 id="update-your-custom-extension-via-cloud-iam-console" tabindex="-1">Update your custom extension via Cloud-IAM console <a class="header-anchor" href="#update-your-custom-extension-via-cloud-iam-console" aria-label="Permalink to "Update your custom extension via Cloud-IAM console""></a></h3><p>It is possible to update your custom extension in Java and packaged as JAR files directly from the Cloud-IAM console. To proceed, you must benefit from the 'Editor' role, more information on the roles <a href="./../references/organization.html#roles">here</a>.</p><ol><li><a href="./../get-started/access-to-cloud-iam-app.html#connect-to-cloud-iam">Connect to Cloud IAM</a> console</li><li>Select the deployment that should receive the custom extension</li><li>Scroll down to category 'Custom Extensions (jar)'</li><li>Click on <code>Replace</code> on the extension that you would like to update</li><li>Choose the .jar file to upload</li><li>Upload it</li></ol><p>You have now uploaded your new version of custom extension on your deployment, the previous custom extension will be removed, and the new one will be uploaded.</p><p>Please note that it may take a few minutes for this update to be completely installed on your Keycloak deployment.</p><figure><img src="/assets/replace-custom-extension-console.f529812a.png" alt="Cloud-IAM Console - Update Custom Extension"><figcaption>Cloud-IAM Console - Update Custom Extension</figcaption></figure><h2 id="delete-your-custom-extension-on-cloud-iam" tabindex="-1">Delete your custom extension on Cloud-IAM <a class="header-anchor" href="#delete-your-custom-extension-on-cloud-iam" aria-label="Permalink to "Delete your custom extension on Cloud-IAM""></a></h2><h3 id="delete-your-custom-extension-via-cloud-iam-console" tabindex="-1">Delete your custom extension via Cloud-IAM console <a class="header-anchor" href="#delete-your-custom-extension-via-cloud-iam-console" aria-label="Permalink to "Delete your custom extension via Cloud-IAM console""></a></h3><p>It is possible to delete your custom extension, from the Cloud-IAM console. To proceed, you must benefit from the 'Editor' role, more information on the roles <a href="./../references/organization.html#roles">here</a>.</p><ol><li><a href="./../get-started/access-to-cloud-iam-app.html#connect-to-cloud-iam">Connect to Cloud IAM</a> console</li><li>Select the deployment that should receive the custom extension</li><li>Scroll down to category 'Custom Extensions (jar)'</li><li>Click on <code>Remove</code> on the extension that you would like to delete</li></ol><p>You have now deleted your custom extension on your deployment.</p><p>Please note that it may take a few minutes for this deletion to be completely done on your Keycloak deployment.</p><figure><img src="/assets/remove-custom-extension-console.a27ed24b.png" alt="Cloud-IAM Console - Delete Custom Extension"><figcaption>Cloud-IAM Console - Delete Custom Extension</figcaption></figure><h2 id="troubleshooting" tabindex="-1">Troubleshooting <a class="header-anchor" href="#troubleshooting" aria-label="Permalink to "Troubleshooting""></a></h2><h3 id="caused-by-java-lang-classnotfoundexception" tabindex="-1">Caused by: java.lang.ClassNotFoundException <a class="header-anchor" href="#caused-by-java-lang-classnotfoundexception" aria-label="Permalink to "Caused by: java.lang.ClassNotFoundException""></a></h3><p>If the extension relies on a Keycloak class, this can lead to an error during the start of the extension such as <code>Caused by: java.lang.ClassNotFoundException: org.keycloak.services.managers.XXXXXX</code> because on Quarkus the class loaders are isolated for safety reasons.</p><p>This issue can be resolved by declaring explicitly the dependencies needed by the extension in the <code>MANFIEST.MF</code> file.</p><p>If for instance, the extension's <code>pom.xml</code> contains such a dependency:</p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#E1E4E8;"><</span><span style="color:#85E89D;">dependency</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">groupId</span><span style="color:#E1E4E8;">>org.keycloak</</span><span style="color:#85E89D;">groupId</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">artifactId</span><span style="color:#E1E4E8;">>keycloak-services</</span><span style="color:#85E89D;">artifactId</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">scope</span><span style="color:#E1E4E8;">>provided</</span><span style="color:#85E89D;">scope</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">version</span><span style="color:#E1E4E8;">>${keycloak.version}</</span><span style="color:#85E89D;">version</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> </</span><span style="color:#85E89D;">dependency</span><span style="color:#E1E4E8;">></span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292E;"><</span><span style="color:#22863A;">dependency</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">groupId</span><span style="color:#24292E;">>org.keycloak</</span><span style="color:#22863A;">groupId</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">artifactId</span><span style="color:#24292E;">>keycloak-services</</span><span style="color:#22863A;">artifactId</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">scope</span><span style="color:#24292E;">>provided</</span><span style="color:#22863A;">scope</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">version</span><span style="color:#24292E;">>${keycloak.version}</</span><span style="color:#22863A;">version</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> </</span><span style="color:#22863A;">dependency</span><span style="color:#24292E;">></span></span></code></pre></div><p>Then the following declaration must follow to tell Quarkus to share the classes between the server and the extension.</p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#E1E4E8;"><</span><span style="color:#85E89D;">plugin</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">groupId</span><span style="color:#E1E4E8;">>org.apache.maven.plugins</</span><span style="color:#85E89D;">groupId</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">artifactId</span><span style="color:#E1E4E8;">>maven-jar-plugin</</span><span style="color:#85E89D;">artifactId</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">configuration</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">archive</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">manifestEntries</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> <</span><span style="color:#85E89D;">Dependencies</span><span style="color:#E1E4E8;">>org.keycloak.keycloak-services</</span><span style="color:#85E89D;">Dependencies</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> </</span><span style="color:#85E89D;">manifestEntries</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> </</span><span style="color:#85E89D;">archive</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> </</span><span style="color:#85E89D;">configuration</span><span style="color:#E1E4E8;">></span></span> <span class="line"><span style="color:#E1E4E8;"> </</span><span style="color:#85E89D;">plugin</span><span style="color:#E1E4E8;">></span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292E;"><</span><span style="color:#22863A;">plugin</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">groupId</span><span style="color:#24292E;">>org.apache.maven.plugins</</span><span style="color:#22863A;">groupId</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">artifactId</span><span style="color:#24292E;">>maven-jar-plugin</</span><span style="color:#22863A;">artifactId</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">configuration</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">archive</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">manifestEntries</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> <</span><span style="color:#22863A;">Dependencies</span><span style="color:#24292E;">>org.keycloak.keycloak-services</</span><span style="color:#22863A;">Dependencies</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> </</span><span style="color:#22863A;">manifestEntries</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> </</span><span style="color:#22863A;">archive</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> </</span><span style="color:#22863A;">configuration</span><span style="color:#24292E;">></span></span> <span class="line"><span style="color:#24292E;"> </</span><span style="color:#22863A;">plugin</span><span style="color:#24292E;">></span></span></code></pre></div><h2 id="resources" tabindex="-1">Resources <a class="header-anchor" href="#resources" aria-label="Permalink to "Resources""></a></h2><ul><li><a href="https://www.keycloak.org/docs/latest/server_development/#_providers" target="_blank" rel="noreferrer">Keycloak documentation - Service Provider Interfaces (SPI)</a></li></ul><ul><li><a href="https://github.com/cloud-iam/keycloak-cloud-iam-theme" target="_blank" rel="noreferrer">GitHub - Cloud-IAM theme</a></li></ul><hr><hr><div class="tip custom-block"><p class="custom-block-title">FAQ</p><ul><li><a href="./../faq/customization.html#how-customisable-is-your-solution">How customisable is your solution?</a></li><li><a href="./../faq/customization.html#as-you-manage-the-instances-configuration-changes-and-customizations-are-possible-by-ourselves">As you manage the instances, configuration changes and customizations are possible by ourselves?</a></li><li><a href="./../faq/customization.html#i-have-custom-extension-on-my-keycloak-does-cloud-iam-allow-me-to-use-my-extension">I have custom extension on my keycloak does cloud-IAM allow me to use my extension?</a></li><li><a href="./../faq/customization.html#what-happens-when-i-push-an-extension-from-the-cloud-iam-api-or-application">What happens when I push an extension from the Cloud-IAM API or application?</a></li></ul></div></div></div></main><footer class="VPDocFooter" data-v-a3c25e27 data-v-a2d931e4><!--[--><!--]--><div class="edit-info" data-v-a2d931e4><!----><div class="last-updated" data-v-a2d931e4><p class="VPLastUpdated" data-v-a2d931e4 data-v-6a7fda06>Last updated: <time datetime="2024-07-16T16:01:29.000Z" data-v-6a7fda06></time></p></div></div><nav class="prev-next" data-v-a2d931e4><div class="pager" data-v-a2d931e4><a class="pager-link prev" href="/how-to-guides/custom-domain.html" data-v-a2d931e4><span class="desc" data-v-a2d931e4>Previous page</span><span class="title" data-v-a2d931e4>Setup custom domain</span></a></div><div class="pager" data-v-a2d931e4><a class="pager-link next" href="/how-to-guides/experimental-features.html" data-v-a2d931e4><span class="desc" data-v-a2d931e4>Next page</span><span class="title" data-v-a2d931e4>Experimental features</span></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div> <script>window.__VP_HASH_MAP__=JSON.parse("{\"faq_customization.md\":\"189f6e83\",\"faq_billing.md\":\"95b5f4dc\",\"faq_realms.md\":\"aed5b201\",\"faq_rolling-upgrade.md\":\"c397416a\",\"how-to-guides_deletion.md\":\"cec240f0\",\"get-started_access-to-cloud-iam-app.md\":\"727650a0\",\"get-started_complete-tutorial.md\":\"eb3135de\",\"faq_migrate-off.md\":\"eb234826\",\"get-started_deploy-my-keycloak.md\":\"a09f6008\",\"get-started_fastest-guide.md\":\"77ed7a0c\",\"get-started_console-overview.md\":\"9fc87a47\",\"faq_keycloak.md\":\"3b11c240\",\"references_on-call-team.md\":\"3fe13d19\",\"references_security.md\":\"fb50c301\",\"references_product.md\":\"4754cb17\",\"references_restart-keycloak.md\":\"86ded453\",\"references_raci.md\":\"eb05714b\",\"references_maintenance-window.md\":\"ca112315\",\"how-to-guides_allow-deny-lists.md\":\"d0f77d07\",\"how-to-guides_audit-logs.md\":\"5534fad7\",\"how-to-guides_smtp.md\":\"5bea2763\",\"faq_users-management.md\":\"1ac68b00\",\"how-to-guides_two-factors-authentication.md\":\"a40dc678\",\"how-to-guides_basic-auth-w-spring-boot-3.md\":\"daa55605\",\"how-to-guides_third-party-resources.md\":\"f87980f9\",\"index.md\":\"a306145c\",\"how-to-guides_experimental-features.md\":\"be436e30\",\"how-to-guides_exports-imports.md\":\"0f1546ce\",\"how-to-guides_impersonate.md\":\"41e3b437\",\"references_api-automation.md\":\"b6c2d540\",\"references_automation.md\":\"7b86b443\",\"how-to-guides_multitenant-with-keycloak.md\":\"d7283a3f\",\"how-to-guides_observability.md\":\"e44f48fd\",\"how-to-guides_organization-configurations.md\":\"7992e434\",\"how-to-guides_security-best-practices.md\":\"fb888326\",\"references_billing.md\":\"ca5080b4\",\"how-to-guides_custom-domain.md\":\"3dc4cc71\",\"faq_plan.md\":\"7536d917\",\"how-to-guides_themes.md\":\"2046d855\",\"references_keycloak-upgrades.md\":\"7c252af8\",\"references_architecture-insights.md\":\"9a6da126\",\"get-started_migrate-to-cloud-iam.md\":\"696f7c86\",\"references_iso27001.md\":\"11e557af\",\"how-to-guides_environment-variables.md\":\"f6d10fdd\",\"references_data-processing-agreement.md\":\"2ddbc667\",\"references_consulting-services.md\":\"dc13afd7\",\"references_cloud-providers.md\":\"53d4581d\",\"how-to-guides_configure-remote-jkws.md\":\"24a7e838\",\"how-to-guides_service-account.md\":\"73ef4d73\",\"references_gdpr-subprocessor.md\":\"455ad73f\",\"faq_cloud-provider.md\":\"ca23fa64\",\"references_disaster-recovery.md\":\"36157433\",\"how-to-guides_custom-extensions.md\":\"e02afdda\",\"references_organization.md\":\"b484edd6\",\"references_plans.md\":\"4b24bd85\",\"resources_keycloak-authentications_overview.md\":\"4d2e8082\",\"resources_keycloak-authentications_one-time-password.md\":\"483ae06c\",\"resources_keycloak-authentications_passwordless-webauthn.md\":\"ea24bc8c\",\"resources_keycloak-authentications_magic-links.md\":\"8b36d4c3\",\"faq_product.md\":\"7284c6a3\",\"references_service-level-agreement.md\":\"a3d6be5b\",\"resources_keycloak-authentications_identity-provider-oidc.md\":\"635b965d\",\"references_status-page.md\":\"77705757\",\"references_support-overview.md\":\"d46fce1c\",\"references_monitoring-and-incident-detection.md\":\"a924edb3\",\"resources_keycloak-authentications_simple-login-password.md\":\"8cb17b4e\",\"how-to-guides_configure-mtls.md\":\"915747fa\",\"references_technical-team.md\":\"c2cd7b3f\",\"how-to-guides_insights.md\":\"9c3c2282\",\"resources_keycloak-authentications_mfa.md\":\"3715529b\",\"resources_keycloak-overview.md\":\"3d6d4b7c\",\"references_terms-of-service.md\":\"146c22c2\",\"resources_keycloak-authentications_social-login.md\":\"b9bdbe1e\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Cloud-IAM | DOCS\",\"description\":\"The Cloud-IAM knowledge base\",\"base\":\"/\",\"head\":[],\"appearance\":true,\"themeConfig\":{\"search\":{\"provider\":\"local\"},\"logo\":\"/logo.svg\",\"sidebar\":[{\"text\":\"Go to cloud-iam.com 🌐\",\"link\":\"https://www.cloud-iam.com/?mtm_campaign=trk-doc-site\"},{\"text\":\"Welcome 👋\",\"link\":\"/\"},{\"text\":\"Get started\",\"collapsed\":false,\"items\":[{\"text\":\"Access to Cloud-IAM App\",\"link\":\"/get-started/access-to-cloud-iam-app\"},{\"text\":\"Deploy my Managed Keycloak\",\"link\":\"/get-started/deploy-my-keycloak\"},{\"text\":\"Console overview\",\"link\":\"/get-started/console-overview\"},{\"text\":\"Migrate to Cloud-IAM\",\"link\":\"/get-started/migrate-to-cloud-iam\"}]},{\"text\":\"How-to guides\",\"collapsed\":true,\"items\":[{\"text\":\"Audit / Observability\",\"collapsed\":true,\"items\":[{\"text\":\"Audits\",\"link\":\"/how-to-guides/audit-logs.md\"},{\"text\":\"Export / Import\",\"link\":\"/how-to-guides/exports-imports\"},{\"text\":\"Insights\",\"link\":\"/how-to-guides/insights\"}]},{\"text\":\"Configuration\",\"collapsed\":true,\"items\":[{\"text\":\"Service account & API\",\"link\":\"/how-to-guides/service-account\"},{\"text\":\"Organization configurations\",\"link\":\"/how-to-guides/organization-configurations\"},{\"text\":\"3rd party resources\",\"link\":\"/how-to-guides/third-party-resources\"},{\"text\":\"Configure SMTP\",\"link\":\"/how-to-guides/smtp\"},{\"text\":\"mTLS\",\"link\":\"/how-to-guides/configure-mTLS\"},{\"text\":\"Multitenant organization\",\"link\":\"/how-to-guides/multitenant-with-keycloak\"},{\"text\":\"Remote JKWS\",\"link\":\"/how-to-guides/configure-remote-jkws\"},{\"text\":\"Impersonate\",\"link\":\"/how-to-guides/impersonate\"},{\"text\":\"Basic auth (Spring Boot 3)\",\"link\":\"/how-to-guides/basic-auth-w-spring-boot-3\"},{\"text\":\"Deletion\",\"link\":\"/how-to-guides/deletion\"}]},{\"text\":\"Customization\",\"collapsed\":true,\"items\":[{\"text\":\"Themes\",\"link\":\"/how-to-guides/themes\"},{\"text\":\"Setup custom domain\",\"link\":\"/how-to-guides/custom-domain\"},{\"text\":\"Custom extensions\",\"link\":\"/how-to-guides/custom-extensions\"},{\"text\":\"Experimental features\",\"link\":\"/how-to-guides/experimental-features\"},{\"text\":\"Environment variables\",\"link\":\"/how-to-guides/environment-variables\"}]},{\"text\":\"Security\",\"collapsed\":true,\"items\":[{\"text\":\"Best practices\",\"link\":\"/how-to-guides/security-best-practices\"},{\"text\":\"Allow lists\",\"link\":\"/how-to-guides/allow-deny-lists\"},{\"text\":\"Two-factor authentication\",\"link\":\"/how-to-guides/two-factors-authentication\"}]}]},{\"text\":\"Cloud-IAM References\",\"collapsed\":true,\"items\":[{\"text\":\"Business continuity\",\"collapsed\":true,\"items\":[{\"text\":\"Architecture insights\",\"link\":\"/references/architecture-insights\"},{\"text\":\"Disaster recovery\",\"link\":\"/references/disaster-recovery\"},{\"text\":\"Monitoring and incident detection\",\"link\":\"/references/monitoring-and-incident-detection\"},{\"text\":\"Keycloak upgrades\",\"link\":\"/references/keycloak-upgrades\"},{\"text\":\"Maintenance window\",\"link\":\"/references/maintenance-window\"},{\"text\":\"Restart your Keycloak\",\"link\":\"/references/restart-keycloak\"},{\"text\":\"Status page\",\"link\":\"/references/status-page\"}]},{\"text\":\"App features\",\"collapsed\":true,\"items\":[{\"text\":\"Organization role\",\"link\":\"/references/organization\"},{\"text\":\"Automation\",\"link\":\"/references/automation\"},{\"text\":\"API Automation\",\"link\":\"/references/api-automation\"},null]},{\"text\":\"SaaS Product\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/references/product\"},{\"text\":\"Plans\",\"link\":\"/references/plans\"},{\"text\":\"Cloud providers\",\"link\":\"/references/cloud-providers\"},{\"text\":\"Billing\",\"link\":\"/references/billing\"}]},{\"text\":\"Security & compliance\",\"collapsed\":true,\"items\":[{\"text\":\"DPA\",\"link\":\"/references/data-processing-agreement\"},{\"text\":\"GDPR subprocessor\",\"link\":\"/references/gdpr-subprocessor\"},{\"text\":\"ISO 27001:2022\",\"link\":\"/references/iso27001\"},{\"text\":\"RACI\",\"link\":\"/references/raci\"},{\"text\":\"SLA\",\"link\":\"/references/service-level-agreement\"},{\"text\":\"Security\",\"link\":\"/references/security\"},{\"text\":\"Terms of service\",\"link\":\"/references/terms-of-service\"}]},{\"text\":\"Support teams\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/references/support-overview\"},{\"text\":\"Technical support team\",\"link\":\"/references/technical-team\"},{\"text\":\"On-call team\",\"link\":\"/references/on-call-team\"},{\"text\":\"Keycloak consulting services\",\"link\":\"/references/consulting-services\"}]}]},{\"text\":\"Keycloak Resources\",\"collapsed\":true,\"items\":[{\"text\":\"Keycloak overview\",\"link\":\"/resources/keycloak-overview\"},{\"text\":\"Keycloak authentications\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/resources/keycloak-authentications/overview\"},{\"text\":\"Simple login password\",\"link\":\"/resources/keycloak-authentications/simple-login-password\"},{\"text\":\"Social login\",\"link\":\"/resources/keycloak-authentications/social-login\"},{\"text\":\"Passwordless with WebAuthn\",\"link\":\"/resources/keycloak-authentications/passwordless-webauthn\"},{\"text\":\"Email or SMS OTP\",\"link\":\"/resources/keycloak-authentications/one-time-password\"},{\"text\":\"Magic links\",\"link\":\"/resources/keycloak-authentications/magic-links\"},{\"text\":\"Identity Provider (OIDC)\",\"link\":\"/resources/keycloak-authentications/identity-provider-oidc\"},{\"text\":\"Multi-factor authentication\",\"link\":\"/resources/keycloak-authentications/mfa\"}]}]},{\"text\":\"FAQ\",\"collapsed\":true,\"items\":[{\"text\":\"Billing\",\"link\":\"/faq/billing\"},{\"text\":\"Cloud-provider\",\"link\":\"/faq/cloud-provider\"},{\"text\":\"Customization\",\"link\":\"/faq/customization\"},{\"text\":\"Keycloak\",\"link\":\"/faq/keycloak\"},{\"text\":\"Plan\",\"link\":\"/faq/plan\"},{\"text\":\"Product\",\"link\":\"/faq/product\"},{\"text\":\"Realms\",\"link\":\"/faq/realms\"},{\"text\":\"Rolling upgrades\",\"link\":\"/faq/rolling-upgrade\"},{\"text\":\"Users management\",\"link\":\"/faq/users-management\"},{\"text\":\"Migrate off Cloud-IAM\",\"link\":\"/faq/migrate-off\"}]}],\"socialLinks\":[{\"icon\":\"twitter\",\"link\":\"https://twitter.com/cloud_iam_com\"},{\"icon\":\"linkedin\",\"link\":\"https://www.linkedin.com/company/cloudiam/\"}]},\"locales\":{},\"scrollOffset\":90,\"cleanUrls\":false}");</script> </body> </html>