Passkey autofill provides an incredibly seamless and secure way for users to sign-in using their passkey.In this guide, we will show you how to add passkey autofill to your Keycloak sign-in flow using Authsignal.When clicking on the username or password
input fields, users will be prompted to authenticate with their passkey that they added through Authsignal’s pre-built UI.
Passkey autofill.
Keycloak provider code example
The above example can be extended to meet your specific requirements.
To make things easy, we will make a few simple changes to your local development setup so that you can simulate a production environment, locally.
We will use mkcert to create a local SSL certificate and local-ssl-proxy to proxy requests to your local Keycloak server.
Replace keycloak-demo.authsignallabs.com with your domain. If using the pre-built UI, this will
differ from your Authsignal custom domain. i.e. keycloak-demo.authsignallabs.com which our demo
app uses vs keycloak-demo-auth.authsignallabs.com where the pre-built UI is running - in this
demonstration.
macOS/Linux
Windows
1
SSL Certificate Setup
brew install mkcertmkcert -installmkcert your_domain # e.g. mkcert keycloak-demo.authsignallabs.com
Take note of the path to the .pem files that are created as you’ll need them in the next steps.
2
Custom Domain to Local IP Address Mapping
Map your custom domain to your local IP address by adding the following line to your hosts file:
sudo vim /etc/hosts
Add this line:
127.0.0.1 your_domain # e.g. 127.0.0.1 keycloak-demo.authsignallabs.com
Open your browser and navigate to https://your_domain:8443 (e.g. https://keycloak-demo.authsignallabs.com:8443) which will redirect you to the admin sign-in page on your proxied https Keycloak server.
We need to add some custom code to the Keycloak sign-in page so that it can use Authsignal’s Web SDK to handle passkey autofill.Start by creating a new theme for your Keycloak instance, at the following path: themes/mytheme/login/login.ftl on your keycloak server.You can call the theme whatever you want, but for this example, we will call it mytheme.Add the following code to the login.ftl file. This code will allow autofill to work when the user clicks the username or password input fields.
webauthn has to be the last autocomplete attribute value in the list otherwise it will not work.
Create a Javascript file at themes/mytheme/login/resources/js/script.js and add the following code. This code is required to allow autofill to work when the user clicks the input.
themes/mytheme/login/resources/js/script.js
function setWebauthnAttribute() { var usernameInput = document.getElementById("username"); var passwordInput = document.getElementById("password"); const formElement = document.querySelector("form"); if (usernameInput && passwordInput) { usernameInput.setAttribute("autocomplete", "username webauthn"); // NOTE: Replace the following values with your Authsignal tenant ID and server URL var client = new window.authsignal.Authsignal({ tenantId: "YOUR_TENANT_ID", baseUrl: "https://api.authsignal.com/v1", }); client.passkey .signIn({ autofill: true }) .then((response) => { if (response) { const hiddenTokenInput = document.createElement("input"); hiddenTokenInput.type = "hidden"; hiddenTokenInput.name = "token"; hiddenTokenInput.value = response.token; formElement.appendChild(hiddenTokenInput); formElement.submit(); } }) .catch((error) => { console.log("error", error); }); }}function loadAuthsignalSdk() { var script = document.createElement("script"); script.onload = setWebauthnAttribute; script.src = "https://unpkg.com/@authsignal/browser@0.5.2/dist/index.min.js"; document.head.appendChild(script);}document.addEventListener("DOMContentLoaded", loadAuthsignalSdk);
Restart your Keycloak server, and navigate to the Realm settings section in the Keycloak admin UI. Click Themes.
On the Login theme line, select mytheme and click Save.
Opening the Keycloak admin sign-in page
You can style your theme by adding your own CSS to the
themes/mytheme/login/resources/css/styles.css file.
Navigate to your realm’s sign-in page and you should see the new theme.
You can find your realm’s sign in page URL by selecting your realm and then navigating to the
Clients section in the Keycloak admin UI and clicking Home URL.
Before passkeys can be used on your Keycloak login page, you need to ensure that you have added your
Keycloak login page domain as an expected origin.As an example, in this demo the passkey configuration is as follows:
That’s it! You’ve successfully added passkey autofill to your Keycloak sign-in flow using Authsignal.
Was this page helpful?
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Authsignal","colors":{"primary":"#8b7bff","light":"#8b7bff","dark":"#8b7bff"},"logo":{"light":"https://mintcdn.com/authsignal-23/Q2QPBK1EKmJpLovY/logo/light.png?fit=max\u0026auto=format\u0026n=Q2QPBK1EKmJpLovY\u0026q=85\u0026s=8c4bd51abfac23972d75d85678c2f1ed","dark":"https://mintcdn.com/authsignal-23/Q2QPBK1EKmJpLovY/logo/dark.png?fit=max\u0026auto=format\u0026n=Q2QPBK1EKmJpLovY\u0026q=85\u0026s=275e53c69fb0a7eff954a0d2ed3421a2"},"favicon":"https://mintcdn.com/authsignal-23/LJehOZQCDC4ES5ZZ/favicon.png?fit=max\u0026auto=format\u0026n=LJehOZQCDC4ES5ZZ\u0026q=85\u0026s=5a39c31db14fe195577d579ebd367170","api":{"openapi":["terminal-api.json","management-api.json","server-api.json","client-api.json","call-connect-api.json"],"playground":{"display":"simple"},"mdx":{"server":["https://api.authsignal.com/v1","https://au.api.authsignal.com/v1","https://eu.api.authsignal.com/v1","https://ca.api.authsignal.com/v1","https://uk.api.authsignal.com/v1"]}},"appearance":{"default":"light"},"background":{"decoration":"gradient"},"footer":{"socials":{"x":"https://x.com/authsignal?lang=en","linkedin":"https://www.linkedin.com/company/authsignal","github":"https://github.com/authsignal"}},"seo":{"metatags":{"description":"Learn how to integrate with Authsignal.","canonical":"https://docs.authsignal.com"},"indexing":"navigable"},"integrations":{"gtm":{"tagId":"GTM-MZPJQQSP"}},"contextual":{"options":["copy","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"authsignal-23","hasAudioNarration":false,"actualSubdomain":"authsignal-23","customDomains":["docs.authsignal.com"],"gitSource":{"type":"github","owner":"authsignal","repo":"authsignal-api-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adfbe877b15c665688251f2","collectionId":"22191e45-76f1-4e14-8e0b-025127b35f13","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adfbe877b15c665688251f2"},"feedback":{"thumbs":true,"edits":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adfbe877b15c665688251f2","clientVersion":"0.0.4005","searchFilterCounts":[{"language":"default","tag":"API reference","count":116},{"language":"default","tag":"Documentation","count":75},{"language":"default","tag":"Management API","count":44},{"language":"default","tag":"SDKs","count":36},{"language":"default","tag":"Client API","count":32},{"language":"default","tag":"Server API","count":29},{"language":"default","tag":"Integrations","count":27},{"language":"default","tag":"Client","count":26},{"language":"default","tag":"Knowledge base","count":23},{"language":"default","tag":"Webhooks","count":18}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles/style.css","content":".action-state-pill{border-radius:9999px;padding:.125rem .625rem;font-size:.75rem;font-weight:500;line-height:1rem;color:#1f2937;background-color:#f3f4f6}.action-state-pill__CHALLENGE_FAILED{background-color:#fdd8d8;color:#611919}.action-state-pill__BLOCK{background-color:#f88b8b;color:#611919}.action-state-pill__CHALLENGE_REQUIRED{background-color:#fef4da;color:#64501d}.action-state-pill__CHALLENGE_SUCCEEDED{background-color:#daf5e7;color:#1c5135}.action-state-pill__REVIEW_REQUIRED{background-color:#d8e5fd;color:#063e5d}.action-state-pill__REVIEW_SUCCEEDED{background-color:#daf5e7;color:#1c5135}.action-state-pill__REVIEW_FAILED{background-color:#fdd8d8;color:#611919}.action-state-pill__ALLOW{background-color:#8fe0b6;color:#1c5135}.w-500{width:500px}.w-400{width:400px}.w-300{width:300px}.rl-timeline{--rl-surface:#fafafa;--rl-border:#e4e4e7;--rl-axis:#a1a1aa;--rl-muted:#71717a;--rl-blocked-band:rgba(245, 158, 11, 0.25);--rl-lane-rail:rgba(113, 113, 122, 0.12);--rl-lane-band:rgba(245, 158, 11, 0.45);--rl-error-fill:#fde2e2;--rl-error-stroke:#e8a0a0;--rl-blocked-fill:#fef3c7;--rl-blocked-stroke:#d9a43a;--rl-success-fill:#dcfce7;--rl-success-stroke:#6cc28a;margin:1.5rem 0}.dark .rl-timeline{--rl-surface:rgba(255, 255, 255, 0.03);--rl-border:rgba(255, 255, 255, 0.1);--rl-axis:#71717a;--rl-muted:#a1a1aa;--rl-blocked-band:rgba(251, 191, 36, 0.25);--rl-lane-rail:rgba(255, 255, 255, 0.06);--rl-lane-band:rgba(251, 191, 36, 0.4);--rl-error-fill:rgba(248, 113, 113, 0.25);--rl-error-stroke:#f87171;--rl-blocked-fill:rgba(251, 191, 36, 0.25);--rl-blocked-stroke:#fbbf24;--rl-success-fill:rgba(74, 222, 128, 0.25);--rl-success-stroke:#4ade80}.rl-timeline__scroll{overflow-x:auto;border:1px solid var(--rl-border);border-radius:1rem;background-color:var(--rl-surface);padding:1.25rem 0 .75rem}.rl-timeline__track{position:relative;min-width:30rem;height:10rem;margin:0 2.5rem}.rl-timeline__axis{position:absolute;top:4rem;left:0;right:0;height:1px;background-color:var(--rl-axis)}.rl-timeline__axis::after{content:\"\";position:absolute;right:-6px;top:-4px;border-top:4.5px solid transparent;border-bottom:4.5px solid transparent;border-left:7px solid var(--rl-axis)}.rl-timeline__blocked{position:absolute;top:calc(4rem - 3px);height:7px;border-radius:9999px;background-color:var(--rl-blocked-band)}.rl-timeline__blocked-label{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);font-size:.75rem;color:var(--rl-muted);white-space:nowrap}.rl-timeline__event{position:absolute;top:4rem;width:0;height:0}.rl-timeline__dot{position:absolute;left:-7px;top:-7px;width:14px;height:14px;border-radius:9999px;border:1.5px solid var(--rl-success-stroke);background-color:var(--rl-success-fill)}.rl-timeline__dot--error{border-color:var(--rl-error-stroke);background-color:var(--rl-error-fill)}.rl-timeline__dot--blocked{border-color:var(--rl-blocked-stroke);background-color:var(--rl-blocked-fill)}.rl-timeline__label{position:absolute;left:0;display:flex;flex-direction:column;align-items:center;gap:.125rem;transform:translateX(-50%);white-space:nowrap}.rl-timeline__event--above .rl-timeline__label{bottom:16px}.rl-timeline__event--below .rl-timeline__label{top:16px}.rl-timeline__title{font-size:.8125rem;font-weight:500;line-height:1.2}.rl-timeline__end,.rl-timeline__time,.rl-timeline__window-label{font-size:.75rem}.rl-timeline__caption,.rl-timeline__end,.rl-timeline__time,.rl-timeline__window-label{line-height:1.2;color:var(--rl-muted);font-variant-numeric:tabular-nums}.rl-timeline__end{position:absolute;top:calc(4rem + 10px)}.rl-timeline__end--start{left:0}.rl-timeline__end--end{right:0}.rl-timeline__window{position:absolute;top:calc(4rem + 4.25rem);height:8px;border:1px solid var(--rl-axis);border-top:none}.rl-timeline__window-label{position:absolute;top:14px;left:50%;transform:translateX(-50%);white-space:nowrap}.rl-timeline__lane{position:absolute;left:0;right:0}.rl-timeline__lane-label{font-size:.75rem;line-height:1.2;color:var(--rl-muted);white-space:nowrap}.rl-timeline__lane-rail{position:relative;margin-top:.375rem;height:7px;border-radius:9999px;background-color:var(--rl-lane-rail)}.rl-timeline__lane-band{position:absolute;top:0;bottom:0;border-radius:9999px;background-color:var(--rl-lane-band)}.rl-timeline__caption{margin-top:.5rem;text-align:center;font-size:.875rem}#hubspot-messages-iframe-container{color-scheme:light}"}],"page":{"pagePath":"integrations/keycloak/keycloak-passkey-autofill","slug":"/integrations/keycloak/keycloak-passkey-autofill","pageMetadata":{"title":"Adding passkey autofill to your Keycloak login flow","description":"Learn how to add passkey autofill to your Keycloak login flow with Authsignal.","sidebarTitle":"Passkey autofill","href":"/integrations/keycloak/keycloak-passkey-autofill"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to add passkey autofill to your Keycloak login flow with Authsignal.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CodeBlock,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Tab,Tabs,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`Passkey autofill provides an incredibly seamless and secure way for users to sign-in using their passkey.`}),`\n`,_jsx(_components.p,{children:`In this guide, we will show you how to add passkey autofill to your Keycloak sign-in flow using Authsignal.`}),`\n`,_jsx(_components.p,{children:`When clicking on the username or password\ninput fields, users will be prompted to authenticate with their passkey that they added through Authsignal’s pre-built UI.`}),`\n`,_jsx(Frame,{caption:`Passkey autofill.`,children:_jsx(`video`,{controls:true,className:`mint-w-full mint-aspect-video`,src:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-passkey-autofill.mp4?fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=578b13cbfa00a064b91115f92d1f120e`,\"data-path\":`images/docs/integrations/keycloak/keycloak-passkey-autofill.mp4`})}),`\n`,_jsx(Card,{icon:`github`,horizontal:true,title:`Keycloak provider code example`,href:`https://github.com/authsignal/authsignal-keycloak-providers`}),`\n`,_jsx(Note,{children:`The above example can be extended to meet your specific requirements.`}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`You have completed the previous guide on `,_jsx(_components.a,{href:`/integrations/keycloak/keycloak-passkey-signup-with-prebuilt-UI`,children:`adding passkey MFA to your Keycloak login flow`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`authsignal-configuration`,children:`Authsignal configuration`}),`\n`,_jsx(Heading,{level:`3`,id:`local-development`,children:`Local development`}),`\n`,_jsxs(_components.p,{children:[`To make things easy, we will make a few simple changes to your local development setup so that you can simulate a production environment, locally.\nWe will use `,_jsx(_components.code,{children:`mkcert`}),` to create a local SSL certificate and `,_jsx(_components.code,{children:`local-ssl-proxy`}),` to proxy requests to your local Keycloak server.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Replace `,_jsx(_components.code,{children:`keycloak-demo.authsignallabs.com`}),` with your domain. If using the pre-built UI, this will\ndiffer from your Authsignal custom domain. i.e. `,_jsx(_components.code,{children:`keycloak-demo.authsignallabs.com`}),` which our demo\napp uses vs `,_jsx(_components.code,{children:`keycloak-demo-auth.authsignallabs.com`}),` where the pre-built UI is running - in this\ndemonstration.`]})}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`macOS/Linux`,id:`macos%2Flinux`,children:_jsxs(Steps,{children:[_jsxs(Step,{title:`SSL Certificate Setup`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`brew`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mkcert`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`mkcert`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -install`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`mkcert`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` your_domain`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # e.g. mkcert keycloak-demo.authsignallabs.com`})]}),`\n`]})})}),_jsx(Info,{children:_jsxs(_components.p,{children:[`Take note of the path to the `,_jsx(_components.code,{children:`.pem`}),` files that are created as you’ll need them in the next steps.`]})})]}),_jsxs(Step,{title:`Custom Domain to Local IP Address Mapping`,children:[_jsxs(_components.p,{children:[`Map your custom domain to your local IP address by adding the following line to your `,_jsx(_components.code,{children:`hosts`}),` file:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` vim`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /etc/hosts`})]}),`\n`]})})}),_jsx(_components.p,{children:`Add this line:`}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`127.0.0.1 your_domain # e.g. 127.0.0.1 keycloak-demo.authsignallabs.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsx(Step,{title:`Run the proxy server`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` local-ssl-proxy`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --key`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` keycloak-demo.authsignallabs.com-key.pem`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --cert`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` keycloak-demo.authsignallabs.com.pem`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --source`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 8444`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --target`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 8443`})]}),`\n`]})})})}),_jsxs(Step,{title:`Run your Keycloak server`,children:[_jsxs(_components.p,{children:[`Learn more about the `,_jsx(_components.a,{href:`https://www.keycloak.org/server/enabletls`,children:`Keycloak server configuration options`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`bin/kc.sh`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` start-dev`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--hostname=keycloak-demo.authsignallabs.com `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--https-certificate-file=keycloak-demo.authsignallabs.com.pem `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--https-certificate-key-file=keycloak-demo.authsignallabs.com-key.pem `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--http-host=127.0.0.1`})}),`\n`]})})})]})]})}),_jsx(Tab,{title:`Windows`,id:`windows`,children:_jsxs(Steps,{children:[_jsxs(Step,{title:`SSL Certificate Setup`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`powershell`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`powershell`,children:_jsxs(_components.code,{language:`powershell`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Install mkcert`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`winget install mkcert`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`mkcert `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`install`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`mkcert your_domain `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# e.g. mkcert keycloak-demo.authsignallabs.com`})]}),`\n`]})})}),_jsx(Info,{children:_jsxs(_components.p,{children:[`Take note of the path to the `,_jsx(_components.code,{children:`.pem`}),` files that are created as you’ll need them in the next steps.`]})})]}),_jsxs(Step,{title:`Custom Domain to Local IP Address Mapping`,children:[_jsxs(_components.p,{children:[`Open Notepad as Administrator and open the hosts file located at:\n`,_jsx(_components.code,{children:`C:\\\\Windows\\\\System32\\\\drivers\\\\etc\\\\hosts`})]}),_jsx(_components.p,{children:`Add this line:`}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`127.0.0.1 your_custom_domain # e.g. 127.0.0.1 keycloak-demo.authsignallabs.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsx(Step,{title:`Run the proxy server`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`powershell`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`powershell`,children:_jsxs(_components.code,{language:`powershell`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`npx local`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ssl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`--`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`key `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`keycloak-demo.authsignallabs.com`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`key.pem `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`--`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`cert `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`keycloak-demo.authsignallabs.com`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.pem `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`--`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`source `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`8444`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` --`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`target `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`8443`})]}),`\n`]})})})}),_jsxs(Step,{title:`Run your Keycloak server`,children:[_jsxs(_components.p,{children:[`Learn more about the `,_jsx(_components.a,{href:`https://www.keycloak.org/server/enabletls`,children:`Keycloak server configuration options`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`powershell`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`powershell`,children:_jsxs(_components.code,{language:`powershell`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.\\\\bin\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`kc.bat`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` start-dev`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ^`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`--`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`hostname`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`keycloak-demo.authsignallabs.com`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ^`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`--`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`https`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`certificate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`file`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`keycloak-demo.authsignallabs.com`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.pem ^`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`--`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`https`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`certificate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`key`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`file`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`keycloak-demo.authsignallabs.com`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`key.pem ^`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`--`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`http`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`host`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`127.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0.1`})]}),`\n`]})})})]})]})})]}),`\n`,_jsx(Steps,{children:_jsxs(Step,{title:`Sign in to your Keycloak server`,stepNumber:5,children:[_jsxs(_components.p,{children:[`Open your browser and navigate to `,_jsx(_components.code,{children:`https://your_domain:8443`}),` (e.g. `,_jsx(_components.code,{children:`https://keycloak-demo.authsignallabs.com:8443`}),`) which will redirect you to the admin sign-in page on your proxied https Keycloak server.`]}),_jsx(Frame,{caption:`Opening the Keycloak admin sign-in page`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-sign-in.png?fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=42dea38e1d390a5d4dde3482bf17c842`,alt:``,\"data-og-width\":`980`,width:`980`,\"data-og-height\":`645`,height:`645`,\"data-path\":`images/docs/integrations/keycloak/keycloak-admin-sign-in.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-sign-in.png?w=280\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=39d047b698d0399adf27e11740b7cbb5 280w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-sign-in.png?w=560\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=ee5704cc60e67921875770a3cc521880 560w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-sign-in.png?w=840\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=da3b59bb9d0d52ad14f8e1eb4a972f98 840w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-sign-in.png?w=1100\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=c0caad8a761e0a8d9b60a9ddb5da8caf 1100w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-sign-in.png?w=1650\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=be13040212a8ebacb2f8e27962dfa42b 1650w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-sign-in.png?w=2500\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=864749359cd9c0a60da0cfd651a6e643 2500w`})})]})}),`\n`,_jsx(Heading,{level:`3`,id:`changes-to-your-keycloak-configuration`,children:`Changes to your Keycloak configuration`}),`\n`,_jsxs(_components.p,{children:[`In your Keycloak admin UI, navigate to the `,_jsx(_components.strong,{children:`Authentication`}),` section and click on your custom flow. Delete the default username and password flow.`]}),`\n`,_jsx(Frame,{caption:`Delete the default username and password flow`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-remove-username-password.png?fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=319bd2a692f06179509826f99a0536dc`,alt:``,\"data-og-width\":`2850`,width:`2850`,\"data-og-height\":`1446`,height:`1446`,\"data-path\":`images/docs/integrations/keycloak/keycloak-admin-remove-username-password.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-remove-username-password.png?w=280\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=2da18dc2ddab624b89304406936e4a21 280w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-remove-username-password.png?w=560\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=0a3a0994163bb51631dda867ea13c2f2 560w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-remove-username-password.png?w=840\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=0a513bab9db8d6f117838cf17e90fcd5 840w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-remove-username-password.png?w=1100\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=984ef558de5aaf9fa5955d9005ae7d02 1100w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-remove-username-password.png?w=1650\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=95f119ca7c77e54bbfdf9ac8d68f60c5 1650w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-remove-username-password.png?w=2500\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=74ab46bfcb95d0f1d022ccb969c4c59e 2500w`})}),`\n`,_jsxs(_components.p,{children:[`Click on the Authsignal Authenticator settings and toggle on `,_jsx(_components.strong,{children:`Enable Passkey Autofill`}),`.`]}),`\n`,_jsx(Frame,{caption:`Enable Passkey Autofill`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-authsignal-settings-button.png?fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=bcf21fec599a288bfad954b3fdb6b304`,alt:``,\"data-og-width\":`2058`,width:`2058`,\"data-og-height\":`378`,height:`378`,\"data-path\":`images/docs/integrations/keycloak/keycloak-authsignal-settings-button.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-authsignal-settings-button.png?w=280\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=e47b6f2e184479c96ebdd52c8d8233ba 280w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-authsignal-settings-button.png?w=560\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=28d63e8e5055d05908df8af18bc6469c 560w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-authsignal-settings-button.png?w=840\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=c44f92618db405e8ed7a0bf5170a2e83 840w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-authsignal-settings-button.png?w=1100\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=43035737a04f2bcbb1b0b40971b3672b 1100w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-authsignal-settings-button.png?w=1650\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=f62b9ef27eeeaf1c0ec23e3848df60ac 1650w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-authsignal-settings-button.png?w=2500\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=44c25f38609f05bb5143907d6ebf882d 2500w`})}),`\n`,_jsx(Frame,{caption:`Enable Passkey Autofill`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-enable-passkey-autofill.png?fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=db76a76cbf3e4dd279f0f69d976d4556`,alt:``,\"data-og-width\":`2876`,width:`2876`,\"data-og-height\":`1452`,height:`1452`,\"data-path\":`images/docs/integrations/keycloak/keycloak-enable-passkey-autofill.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-enable-passkey-autofill.png?w=280\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=922a81e7eee077b440ea7a5339bf5ec6 280w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-enable-passkey-autofill.png?w=560\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=ffc8f4e3f4a90d9e37cdedbf51c901dc 560w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-enable-passkey-autofill.png?w=840\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=8a5eba06d441a7f41cf0e3ff4a90f453 840w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-enable-passkey-autofill.png?w=1100\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=907290a191f575d32c1b606d34f97e7e 1100w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-enable-passkey-autofill.png?w=1650\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=f14475250c141a1264f17c0ee88c31d9 1650w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-enable-passkey-autofill.png?w=2500\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=cdad9d81615af88362a6657e68fa0c77 2500w`})}),`\n`,_jsx(Heading,{level:`3`,id:`sign-in-ui-configuration`,children:`Sign-in UI configuration`}),`\n`,_jsxs(_components.p,{children:[`We need to add some custom code to the Keycloak sign-in page so that it can use `,_jsx(_components.a,{href:`/sdks/client/web/setup`,children:`Authsignal’s Web SDK`}),` to handle passkey autofill.`]}),`\n`,_jsxs(_components.p,{children:[`Start by creating a new theme for your Keycloak instance, at the following path: `,_jsx(_components.code,{children:`themes/mytheme/login/login.ftl`}),` on your keycloak server.`]}),`\n`,_jsxs(_components.p,{children:[`You can call the theme whatever you want, but for this example, we will call it `,_jsx(_components.code,{children:`mytheme`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Add the following code to the `,_jsx(_components.code,{children:`login.ftl`}),` file. This code will allow autofill to work when the user clicks the username or password input fields.`]}),`\n`,_jsx(CodeBlock,{filename:`themes/mytheme/login/login.ftl`,numberOfLines:`35`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`35`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`link`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` rel`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"stylesheet\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` href`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:'\"${url.resourcesPath}/css/styles.css\"'}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`script`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` src`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:'\"${url.resourcesPath}/js/script.js\"'}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`script`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"login-container\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"login-card\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"login-header\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`p`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Please enter your credentials to continue`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`p`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`form`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` action`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:'\"${url.loginAction}\"'}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` method`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"post\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"login-form\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"form-group\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`label`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"username\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Username`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`input`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"username\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"username\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"text\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` autocomplete`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"username webauthn\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` placeholder`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Enter your username\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"form-group\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`label`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"password\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Password`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`input`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"password\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"password\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"password\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` placeholder`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Enter your password\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` autocomplete`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"current-password webauthn\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`button`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"submit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Sign In`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`button`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`form`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`webauthn`}),` has to be the last autocomplete attribute value in the list otherwise it will not work.`]})}),`\n`,_jsxs(_components.p,{children:[`Create a Javascript file at `,_jsx(_components.code,{children:`themes/mytheme/login/resources/js/script.js`}),` and add the following code. This code is required to allow autofill to work when the user clicks the input.`]}),`\n`,_jsx(CodeBlock,{filename:`themes/mytheme/login/resources/js/script.js`,numberOfLines:`41`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`41`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` setWebauthnAttribute`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` var`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` usernameInput`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getElementById`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"username\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` var`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` passwordInput`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getElementById`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"password\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` formElement`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`querySelector`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"form\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`usernameInput`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` passwordInput`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` usernameInput`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setAttribute`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"autocomplete\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"username webauthn\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // NOTE: Replace the following values with your Authsignal tenant ID and server URL`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` var`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` window`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authsignal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Authsignal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` tenantId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"YOUR_TENANT_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` baseUrl:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.authsignal.com/v1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passkey`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`signIn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`autofill:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` })`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`then`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`response`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`response`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` hiddenTokenInput`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createElement`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"input\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` hiddenTokenInput`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"hidden\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` hiddenTokenInput`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"token\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` hiddenTokenInput`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`value`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` response`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`token`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` formElement`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`appendChild`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hiddenTokenInput`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` formElement`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`submit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`catch`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` loadAuthsignalSdk`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` var`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` script`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createElement`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"script\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` script`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`onload`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` setWebauthnAttribute`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` script`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`src`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://unpkg.com/@authsignal/browser@0.5.2/dist/index.min.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`head`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`appendChild`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`script`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`addEventListener`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"DOMContentLoaded\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`loadAuthsignalSdk`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Restart your Keycloak server, and navigate to the `,_jsx(_components.strong,{children:`Realm settings`}),` section in the Keycloak admin UI. Click `,_jsx(_components.strong,{children:`Themes`}),`.\nOn the `,_jsx(_components.strong,{children:`Login theme`}),` line, select `,_jsx(_components.code,{children:`mytheme`}),` and click `,_jsx(_components.strong,{children:`Save`}),`.`]}),`\n`,_jsx(Frame,{caption:`Opening the Keycloak admin sign-in page`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-add-theme.png?fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=fbd58363385fad6dccf7ce5451fb61b4`,alt:``,\"data-og-width\":`1637`,width:`1637`,\"data-og-height\":`746`,height:`746`,\"data-path\":`images/docs/integrations/keycloak/keycloak-admin-add-theme.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-add-theme.png?w=280\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=90284ba85c76730acd87c6d746a20dc4 280w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-add-theme.png?w=560\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=0a874f1f13d577a7c6c9e2e1de5b6811 560w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-add-theme.png?w=840\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=9a23cc8879b9214c06ce0c5f429fc428 840w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-add-theme.png?w=1100\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=be6ba17c817accd959f888d361b2dae0 1100w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-add-theme.png?w=1650\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=68d7709d367df47d3ad3ebc9261df543 1650w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-admin-add-theme.png?w=2500\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=cd2e47da6e1b34b176ae0ce9b4e34da0 2500w`})}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`You can style your theme by adding your own CSS to the\n`,_jsx(_components.code,{children:`themes/mytheme/login/resources/css/styles.css`}),` file.`]})}),`\n`,_jsx(_components.p,{children:`Navigate to your realm’s sign-in page and you should see the new theme.`}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`You can find your realm’s sign in page URL by selecting your realm and then navigating to the\n`,_jsx(_components.strong,{children:`Clients`}),` section in the Keycloak admin UI and clicking `,_jsx(_components.strong,{children:`Home URL`}),`.`]})}),`\n`,_jsx(Frame,{caption:`Find your realm's Home URL`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-client-url.png?fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=16c95982d3b1b56bf066f1b76f8ef182`,alt:``,\"data-og-width\":`2888`,width:`2888`,\"data-og-height\":`820`,height:`820`,\"data-path\":`images/docs/integrations/keycloak/keycloak-client-url.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-client-url.png?w=280\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=7884967626aca3a0f92cc1e6b44c69c8 280w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-client-url.png?w=560\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=0ddafd2959e6fea5d24984b89bff4af4 560w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-client-url.png?w=840\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=9c7d9d83b47f3770daaecd7a3627c5bb 840w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-client-url.png?w=1100\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=4733539558164b39d37061654d502283 1100w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-client-url.png?w=1650\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=40fa4ef2959e39c65a6bf66fe42140f9 1650w, https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-client-url.png?w=2500\u0026fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=efee8c59ef9c2873354ce2a2cf826de6 2500w`})}),`\n`,_jsx(Heading,{level:`3`,id:`passkey-configuration-updates`,children:`Passkey configuration updates`}),`\n`,_jsxs(_components.p,{children:[`Before passkeys can be used on your Keycloak login page, you need to ensure that you have added your\nKeycloak login page domain as an `,_jsx(_components.a,{href:`/authentication-methods/passkey/prebuilt-ui#configure-passkeys-in-the-authsignal-portal`,children:`expected origin`}),`.`]}),`\n`,_jsx(_components.p,{children:`As an example, in this demo the passkey configuration is as follows:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Relying Party ID: `,_jsx(_components.code,{children:`authsignallabs.com`})]}),`\n`,_jsxs(_components.li,{children:[`Expected Origins: `,_jsx(_components.code,{children:`keycloak-demo.authsignallabs.com`}),` (Keycloak login page) and `,_jsx(_components.code,{children:`keycloak-demo-auth.authsignallabs.com`}),` (pre-built UI custom domain)`]}),`\n`]}),`\n`,_jsx(Frame,{caption:`Passkey autofill.`,children:_jsx(`video`,{controls:true,className:`mint-w-full mint-aspect-video`,src:`https://mintcdn.com/authsignal-23/8bvDamO56aVu-Ay2/images/docs/integrations/keycloak/keycloak-passkey-autofill.mp4?fit=max\u0026auto=format\u0026n=8bvDamO56aVu-Ay2\u0026q=85\u0026s=578b13cbfa00a064b91115f92d1f120e`,\"data-path\":`images/docs/integrations/keycloak/keycloak-passkey-autofill.mp4`})}),`\n`,_jsx(Heading,{level:`2`,id:`conclusion`,children:`Conclusion`}),`\n`,_jsx(_components.p,{children:`That’s it! You’ve successfully added passkey autofill to your Keycloak sign-in flow using Authsignal.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Adding passkey autofill to your Keycloak login flow","description":"Learn how to add passkey autofill to your Keycloak login flow with Authsignal.","sidebarTitle":"Passkey autofill","href":"/integrations/keycloak/keycloak-passkey-autofill"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Authsignal configuration","slug":"authsignal-configuration","depth":2,"children":[{"title":"Local development","slug":"local-development","depth":3,"children":[]},{"title":"Changes to your Keycloak configuration","slug":"changes-to-your-keycloak-configuration","depth":3,"children":[]},{"title":"Sign-in UI configuration","slug":"sign-in-ui-configuration","depth":3,"children":[]},{"title":"Passkey configuration updates","slug":"passkey-configuration-updates","depth":3,"children":[]}]},{"title":"Conclusion","slug":"conclusion","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/authsignal-23/eacb9ac8e5ece268/.prettierrc.js"],"dynamicCss":".mint-aspect-video {\n aspect-ratio: 16 / 9\n}\n.mint-w-full {\n width: 100%\n}","subdomain":"authsignal-23","siteName":"Authsignal","title":"Adding passkey autofill to your Keycloak login flow - Authsignal","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-23T02:46:17.822Z","originalFileLocation":"integrations/keycloak/keycloak-passkey-autofill.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how to add passkey autofill to your Keycloak login flow with Authsignal.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Authsignal\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Adding passkey autofill to your Keycloak login flow - Authsignal\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to add passkey autofill to your Keycloak login flow with Authsignal.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Authsignal\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://authsignal-23.mintlify.app/_mintlify/api/og/v2?division=Keycloak\u0026amp;title=Adding+passkey+autofill+to+your+Keycloak+login+flow\u0026amp;description=Learn+how+to+add+passkey+autofill+to+your+Keycloak+login+flow+with+Authsignal.\u0026amp;theme=4f88b0d0c8f63fb60eb7d9d3\u0026amp;signature=be9ad657d498cebb672d9b6bc96eba77510e70bea3447d68c3a067f2f40aad4a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Adding passkey autofill to your Keycloak login flow - Authsignal\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to add passkey autofill to your Keycloak login flow with Authsignal.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://authsignal-23.mintlify.app/_mintlify/api/og/v2?division=Keycloak\u0026amp;title=Adding+passkey+autofill+to+your+Keycloak+login+flow\u0026amp;description=Learn+how+to+add+passkey+autofill+to+your+Keycloak+login+flow+with+Authsignal.\u0026amp;theme=4f88b0d0c8f63fb60eb7d9d3\u0026amp;signature=be9ad657d498cebb672d9b6bc96eba77510e70bea3447d68c3a067f2f40aad4a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/authsignal-23/zo2TXHNNAcuLzclo/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Authsignal\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#8b7bff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/keycloak/keycloak-passkey-autofill.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.authsignal.com/#organization\",\"name\":\"Authsignal\",\"url\":\"https://docs.authsignal.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/authsignal-23/Q2QPBK1EKmJpLovY/logo/light.png?fit=max\u0026auto=format\u0026n=Q2QPBK1EKmJpLovY\u0026q=85\u0026s=8c4bd51abfac23972d75d85678c2f1ed\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.authsignal.com#website\",\"name\":\"Authsignal\",\"url\":\"https://docs.authsignal.com\",\"publisher\":{\"@id\":\"https://docs.authsignal.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill#webpage\",\"url\":\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill\",\"name\":\"Adding passkey autofill to your Keycloak login flow\",\"description\":\"Learn how to add passkey autofill to your Keycloak login flow with Authsignal.\",\"dateModified\":\"2026-01-23T02:46:17.822Z\",\"isPartOf\":{\"@id\":\"https://docs.authsignal.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://docs.authsignal.com/integrations/auth0\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Keycloak\",\"item\":\"https://docs.authsignal.com/integrations/keycloak/getting-started\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Adding passkey autofill to your Keycloak login flow\",\"item\":\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill#article\",\"headline\":\"Adding passkey autofill to your Keycloak login flow\",\"name\":\"Adding passkey autofill to your Keycloak login flow\",\"description\":\"Learn how to add passkey autofill to your Keycloak login flow with Authsignal.\",\"url\":\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill\",\"mainEntityOfPage\":{\"@id\":\"https://docs.authsignal.com/integrations/keycloak/keycloak-passkey-autofill#webpage\"},\"dateModified\":\"2026-01-23T02:46:17.822Z\",\"publisher\":{\"@id\":\"https://docs.authsignal.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.authsignal.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Authsignal\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Authsignal","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","groups":[{"group":"Getting started","pages":[{"title":"Welcome to Authsignal Docs","sidebarTitle":"Overview","mode":"center","href":"/getting-started/overview"},{"title":"Set up your Authsignal account","sidebarTitle":"Set up Authsignal","mode":"center","href":"/getting-started/set-up-authsignal"}]},{"group":"Integrations","pages":[{"group":"Auth0","pages":[{"title":"Using Authsignal with Auth0","sidebarTitle":"Getting started","href":"/integrations/auth0"},{"title":"Adding adaptive MFA to Auth0","sidebarTitle":"Adaptive MFA","href":"/integrations/auth0-refine-mfa"},{"title":"Using an internal user ID","sidebarTitle":"Internal user ID","href":"/integrations/auth0-internal-user-id"},{"title":"Auth0 Native Bridge","sidebarTitle":"Native Bridge","href":"/integrations/auth0-native-bridge"}]},{"group":"Amazon Cognito","pages":[{"title":"Integrating Authsignal with Amazon Cognito","sidebarTitle":"Getting started","href":"/integrations/aws-cognito/getting-started"},{"title":"Managing authenticators when integrating Authsignal with Amazon Cognito","sidebarTitle":"Authenticators","href":"/integrations/aws-cognito/authenticators"},{"title":"Using passkeys when integrating Authsignal with Amazon Cognito","sidebarTitle":"Passkeys","href":"/integrations/aws-cognito/passkeys"},{"title":"Adding adaptive MFA to your Cognito login flow","sidebarTitle":"Adaptive MFA","href":"/integrations/aws-cognito/rules"},{"title":"Uber app example","href":"/integrations/aws-cognito/example-app"}]},{"title":"Using Authsignal with WSO2 Identity Platform","sidebarTitle":"WSO2 Identity Platform","href":"/integrations/wso2-identity-platform"},{"group":"Azure AD B2C","pages":[{"title":"Using Authsignal for MFA with Microsoft Azure AD B2C","sidebarTitle":"Getting started","href":"/integrations/azure-ad-b2c/azure-ad-b2c-mfa"},{"title":"Passwordless login with Microsoft Azure AD B2C","sidebarTitle":"Passwordless login","href":"/integrations/azure-ad-b2c/azure-ad-b2c-passwordless"},{"title":"Using Passkeys with Microsoft Azure AD B2C","sidebarTitle":"Passkey autofill","href":"/integrations/azure-ad-b2c/azure-ad-b2c-passkey"},{"title":"Microsoft Azure AD B2C Custom Policy Snippets","sidebarTitle":"Custom policy snippets","href":"/integrations/azure-ad-b2c/azure-ad-b2c-snippets"}]},{"title":"Entra ID (External Authentication Methods - EAM)","sidebarTitle":"Entra ID","href":"/integrations/entra-id-eam"},{"group":"Duende IdentityServer","pages":[{"title":"Adding MFA to Duende IdentityServer","sidebarTitle":"Getting started","href":"/integrations/identityserver/getting-started"},{"title":"Adding passkeys to Duende IdentityServer","sidebarTitle":"Passkeys","href":"/integrations/identityserver/passkeys"}]},{"group":"Keycloak","pages":[{"title":"Adding MFA to your Keycloak login flow","sidebarTitle":"Getting started","href":"/integrations/keycloak/getting-started"},{"title":"Using Keycloak groups and roles in authentication rules","sidebarTitle":"Groups and roles","href":"/integrations/keycloak/keycloak-groups-roles"},{"title":"Federated Login with MFA","sidebarTitle":"Federated Login with MFA","href":"/integrations/keycloak/keycloak-federated-sign-in"},{"title":"Adding passkey MFA to your Keycloak login flow","description":"Learn how to add passkey MFA to your Keycloak login flow with Authsignal.","sidebarTitle":"Passkey MFA","href":"/integrations/keycloak/keycloak-passkey-signup-with-prebuilt-UI"},{"title":"Adding passkey autofill to your Keycloak login flow","sidebarTitle":"Passkey autofill","href":"/integrations/keycloak/keycloak-passkey-autofill"}]},{"title":"NextAuth.js (now known as Auth.js)","sidebarTitle":"NextAuth","description":"Learn how to integrate Authsignal with your Next.js app when using NextAuth.","href":"/integrations/nextauth-js"},{"title":"Ruby on Rails","href":"/integrations/ruby-on-rails"},{"group":"ServiceNow","pages":[{"title":"ServiceNow","sidebarTitle":"Overview","href":"/integrations/service-now/overview"},{"title":"Custom mapping","sidebarTitle":"Custom mapping","href":"/integrations/service-now/table-mapping"}]},{"title":"Getting started with Salesforce","sidebarTitle":"Salesforce","href":"/integrations/salesforce/getting-started"}]},{"group":"Authentication methods","pages":[{"group":"Passkeys","pages":[{"title":"Passkeys using the Web SDK","sidebarTitle":"Web SDK","href":"/authentication-methods/passkey/web-sdk"},{"title":"Passkeys using Mobile SDKs","sidebarTitle":"Mobile SDKs","href":"/authentication-methods/passkey/mobile-sdks"},{"title":"Passkeys using Authsignal's pre-built UI","sidebarTitle":"Pre-built UI","href":"/authentication-methods/passkey/prebuilt-ui"},{"title":"Passkeys best practice for the web","sidebarTitle":"Web best practices","href":"/authentication-methods/passkey/best-practices-web"},{"title":"Passkeys best practice for native mobile apps","sidebarTitle":"Mobile best practices","href":"/authentication-methods/passkey/best-practices-mobile"}]},{"group":"App verification","pages":[{"title":"Push verification","href":"/authentication-methods/app-verification/push"},{"title":"Configuring push notifications","href":"/authentication-methods/app-verification/managed-push"},{"title":"QR code verification","href":"/authentication-methods/app-verification/qr-code"},{"title":"In-app verification","href":"/authentication-methods/app-verification/in-app"},{"title":"Attestation","href":"/authentication-methods/app-verification/attestation"},{"title":"Enrollment lifecycle","href":"/authentication-methods/app-verification/enrollment-lifecycle"}]},{"group":"Email","pages":[{"title":"Email OTP","href":"/authentication-methods/email/otp"},{"title":"Email magic link","href":"/authentication-methods/email/magic-link"}]},{"title":"SMS OTP","sidebarTitle":"SMS","href":"/authentication-methods/sms-otp"},{"title":"WhatsApp OTP","sidebarTitle":"WhatsApp","href":"/authentication-methods/whatsapp-otp"},{"title":"Authenticator app (TOTP)","sidebarTitle":"Authenticator app","href":"/authentication-methods/totp"},{"title":"Biometric auth","href":"/authentication-methods/biometrics"}]},{"group":"Implementation options","pages":[{"group":"Pre-built UI","pages":[{"title":"Pre-built UI","sidebarTitle":"Overview","href":"/implementation-options/prebuilt-ui/overview"},{"title":"Presentation modes","href":"/implementation-options/prebuilt-ui/presentation-modes"},{"title":"Enrolling authenticators","href":"/implementation-options/prebuilt-ui/enrolling-authenticators"},{"title":"Removing authenticators","href":"/implementation-options/prebuilt-ui/removing-authenticators"},{"group":"Customization","pages":[{"title":"Branding","href":"/implementation-options/prebuilt-ui/custom-branding"},{"title":"Message overrides","href":"/implementation-options/prebuilt-ui/message-overrides"},{"title":"Localization","href":"/implementation-options/prebuilt-ui/localization"},{"title":"Custom domains","href":"/implementation-options/prebuilt-ui/custom-domains"},{"title":"Contextual messaging","href":"/implementation-options/prebuilt-ui/contextual-messaging"}]},{"title":"Opt-in consent checkbox","sidebarTitle":"Opt-in consent","href":"/implementation-options/prebuilt-ui/opt-in-consent"},{"title":"Passkey uplift prompt","href":"/implementation-options/prebuilt-ui/passkey-uplift-prompt"}]},{"group":"Web SDK","pages":[{"title":"Web SDK","sidebarTitle":"Overview","href":"/implementation-options/web-sdk/overview"}]},{"group":"Mobile SDKs","pages":[{"title":"Mobile SDKs","sidebarTitle":"Overview","href":"/implementation-options/mobile-sdks/overview"}]}]},{"group":"Actions \u0026 rules","pages":[{"group":"Actions","pages":[{"sidebarTitle":"Getting started","title":"Getting started with actions","href":"/actions-rules/actions/getting-started"},{"title":"Implementing MFA","sidebarTitle":"Implementing MFA","href":"/actions-rules/actions/implementing-mfa"},{"title":"Passwordless login","sidebarTitle":"Passwordless login","href":"/actions-rules/actions/passwordless-login"},{"title":"Restricting authenticators for an action","sidebarTitle":"Restricting authenticators","href":"/actions-rules/actions/restricting-authenticators"}]},{"group":"Rules","pages":[{"sidebarTitle":"Getting started","title":"Getting started with rules","href":"/actions-rules/rules/getting-started"},{"title":"Adaptive MFA","sidebarTitle":"Adaptive MFA","href":"/actions-rules/rules/adaptive-mfa"},{"title":"Customizing rules with custom data points","sidebarTitle":"Custom data points","href":"/actions-rules/rules/custom-data-points"},{"title":"Custom lists","sidebarTitle":"Custom lists","href":"/actions-rules/rules/custom-lists"},{"title":"Testing rules","sidebarTitle":"Testing rules","href":"/actions-rules/rules/testing-rules"}]}]},{"group":"Users","pages":[{"title":"User management","href":"/users/user-management"},{"title":"User actions","href":"/users/user-actions"}]},{"group":"Advanced usage","pages":[{"title":"Session management","href":"/advanced-usage/session-management"},{"title":"Custom API domains","href":"/advanced-usage/custom-api-domains"},{"title":"Configuration as code with Terraform","sidebarTitle":"Configuration as code","href":"/advanced-usage/configuration-as-code"},{"title":"Programmatically managing authenticators on behalf of users","sidebarTitle":"Programmatic authenticator management","href":"/advanced-usage/programmatic-authenticator-management"},{"title":"Authenticator binding","href":"/advanced-usage/authenticator-binding"}]}]},{"tab":"SDKs","icon":"rectangle-code","pages":[{"title":"SDKs","href":"/sdks/server/overview"}]},{"tab":"API reference","icon":"rectangle-terminal","pages":[{"title":"API reference","href":"/api-reference/overview"}]},{"tab":"Webhooks","icon":"webhook","pages":[{"title":"Webhooks","href":"/advanced-usage/webhooks/introduction"}]},{"tab":"Knowledge base","icon":"books","pages":[{"title":"Knowledge base","href":"/knowledge-base/overview"}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog/product-updates"}]}]},"title":"Adding passkey autofill to your Keycloak login flow - Authsignal","buildId":"dpl_48qhjNLiu9iJQQSZJz9Fa2ihBbPH","deploymentId":"dpl_48qhjNLiu9iJQQSZJz9Fa2ihBbPH","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-a9VIxNFT.js","DynamicMarkdown-Cp6hhEk1.js","zoom-image-lightbox-DoivK0O3.js","lightbox-handle-r17bVUz3.js"]}