{
    "componentChunkName": "component---src-pages-blog-markdown-remark-fields-slug-js",
    "path": "/blog/passkeys-vs-passwords",
    "result": {"data":{"markdownRemark":{"html":"<p>Passwords have been obsolete for some time now. They are insecure, <a href=\"https://supertokens.com/blog/what-is-passwordless-authentication#common-problems-with-password-based-authentication-\" target=\"_blank\" rel=\"nofollow\">susceptible to a number of attack vectors</a> and are honestly a pain to remember. The more astute amongst you have already moved to more secure methods like using a password manager or passwordless authentication using multiple factors but, they can be more cumbersome and require additional steps. Waiting for OTPs can take time and the delivery service can be prone to failure, setting up and managing an authenticator app is cumbersome and dealing with multiple factors is always tedious. Passkeys is a modern alternative that aim to solve a number of the issues associated with traditional and more advanced authentication methods. Let’s break it down.</p>\n<h2 id=\"what-are-passkeys\" style=\"position:relative;\"><a href=\"#what-are-passkeys\" aria-label=\"what are passkeys permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What Are Passkeys?</h2>\n<p>Passkeys are cryptographic credentials built on <strong>FIDO2/WebAuthn</strong> standards. Unlike passwords, they do not depend on a user’s memory. Instead, they use a device-bound private-public key pair for authentication. Users typically unlock their credentials using biometrics (like a fingerprint or facial recognition) or a device PIN.</p>\n<h3 id=\"key-technical-difference\" style=\"position:relative;\"><a href=\"#key-technical-difference\" aria-label=\"key technical difference permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Key Technical Difference</h3>\n<p>Passwords are <em>knowledge-based</em>—users must know something (their password) to log in. Passkeys eliminate this knowledge factor. Instead, they are <em>possession-based</em>, stored securely on the user’s device and validated using a cryptographic challenge-response model.</p>\n<h2 id=\"security-comparison--passkeys-vs-passwords\" style=\"position:relative;\"><a href=\"#security-comparison--passkeys-vs-passwords\" aria-label=\"security comparison  passkeys vs passwords permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Security Comparison – Passkeys vs Passwords</h2>\n<h3 id=\"password-vulnerabilities\" style=\"position:relative;\"><a href=\"#password-vulnerabilities\" aria-label=\"password vulnerabilities permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Password Vulnerabilities</h3>\n<ul>\n<li><strong>Phishing</strong>: Users can be tricked into entering passwords on fake sites.</li>\n<li><strong>Credential Stuffing</strong>: Reusing passwords across services leads to chain-compromises.</li>\n<li><strong>Brute-force Attacks</strong>: Weak or short passwords are easily cracked.</li>\n<li><strong>Database Leaks</strong>: Even with hashing, stored passwords can be compromised.</li>\n</ul>\n<h3 id=\"passkey-strengths\" style=\"position:relative;\"><a href=\"#passkey-strengths\" aria-label=\"passkey strengths permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Passkey Strengths</h3>\n<ul>\n<li><strong>Phishing Resistant</strong>: Passkeys are bound to the origin, so they can’t be reused on fraudulent websites.</li>\n<li><strong>No Reuse</strong>: Each passkey is unique to the service.</li>\n<li><strong>Asymmetric Cryptography</strong>: Only the public key is stored on the server, while the private key never leaves the user’s device.</li>\n<li><strong>No Shared Secrets</strong>: There’s nothing for attackers to steal in a breach.</li>\n</ul>\n<h3 id=\"data-breach-resilience\" style=\"position:relative;\"><a href=\"#data-breach-resilience\" aria-label=\"data breach resilience permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Data Breach Resilience</h3>\n<p>If a database storing passkey public keys is breached, attackers gain nothing usable. In contrast, even hashed password leaks can eventually be exploited.</p>\n<h2 id=\"usability-and-user-experience\" style=\"position:relative;\"><a href=\"#usability-and-user-experience\" aria-label=\"usability and user experience permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Usability and User Experience</h2>\n<h3 id=\"passwords-ux\" style=\"position:relative;\"><a href=\"#passwords-ux\" aria-label=\"passwords ux permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Passwords UX</h3>\n<ul>\n<li>Must be created, remembered, and frequently updated.</li>\n<li>Forgotten passwords lead to recovery flows that frustrate users.</li>\n<li>Complex rules (e.g., symbols, numbers) degrade user experience.</li>\n</ul>\n<h3 id=\"passkeys-ux\" style=\"position:relative;\"><a href=\"#passkeys-ux\" aria-label=\"passkeys ux permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Passkeys UX</h3>\n<ul>\n<li>Authenticate using biometrics or a simple device PIN.</li>\n<li>No passwords to remember or reset.</li>\n<li>Faster and more intuitive login flows.</li>\n</ul>\n<h3 id=\"cross-device-sync\" style=\"position:relative;\"><a href=\"#cross-device-sync\" aria-label=\"cross device sync permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Cross-Device Sync</h3>\n<p>Thanks to ecosystems like:</p>\n<ul>\n<li><strong>Apple iCloud Keychain</strong></li>\n<li><strong>Google Password Manager</strong></li>\n</ul>\n<p>Passkeys can sync across user devices securely, making cross-platform login seamless.</p>\n<h2 id=\"implementation-complexity\" style=\"position:relative;\"><a href=\"#implementation-complexity\" aria-label=\"implementation complexity permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Implementation Complexity</h2>\n<h3 id=\"password-setup\" style=\"position:relative;\"><a href=\"#password-setup\" aria-label=\"password setup permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Password Setup</h3>\n<ul>\n<li>Easy to implement.</li>\n<li>Requires secure storage (hashing with salt).</li>\n<li>Must monitor for breaches and enforce strong policies.</li>\n</ul>\n<h3 id=\"passkey-setup\" style=\"position:relative;\"><a href=\"#passkey-setup\" aria-label=\"passkey setup permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Passkey Setup</h3>\n<ul>\n<li>Requires WebAuthn support from browsers and devices.</li>\n<li>Implementation requires understanding FIDO2 standards.</li>\n<li>Must handle fallback for unsupported clients.</li>\n</ul>\n<h3 id=\"developer-considerations\" style=\"position:relative;\"><a href=\"#developer-considerations\" aria-label=\"developer considerations permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Developer Considerations</h3>\n<ul>\n<li>Leverage SDKs like <a href=\"https://simplewebauthn.dev/\" target=\"_blank\" rel=\"nofollow\">SimpleWebAuthn</a>, or built-in browser APIs.</li>\n<li>Requires initial user education and UX tuning.</li>\n<li>Need to support multiple authenticators (e.g., platform vs cross-platform).</li>\n</ul>\n<h2 id=\"implementing-passkeys-in-your-application-with-supertokens\" style=\"position:relative;\"><a href=\"#implementing-passkeys-in-your-application-with-supertokens\" aria-label=\"implementing passkeys in your application with supertokens permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Implementing Passkeys in your application (With SuperTokens!)</h2>\n<h3 id=\"setup-supertokens-in-your-application\" style=\"position:relative;\"><a href=\"#setup-supertokens-in-your-application\" aria-label=\"setup supertokens in your application permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Setup SuperTokens in your application</h3>\n<p>You will first need to set up SuperTokens in your web application.</p>\n<ol>\n<li>Create a <a href=\"https://supertokens.com/auth\" target=\"_blank\" rel=\"nofollow\">SuperTokens Account</a>\n<ul>\n<li>Once you crate an account you can either use the managed cloud service or <a href=\"https://supertokens.com/docs/deployment/self-host-supertokens\" target=\"_blank\" rel=\"nofollow\">self-host the SuperTokens core service</a>.</li>\n</ul>\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/8a0dba703edd532394acf8b688d35045/58a91/core-service-initialization.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 21.51898734177215%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAk0lEQVQY032OwQ6DMAxD+f/vG3Afk8Y0Wpo2bUYLGFFAsMN2eLITWZaLprmjriuU5Q1VXaFtn9C6g1JvKHXoSdd9+zVL1GesNSi2w8CYU/teb1z9hSOjd89s4Rzl0kJEwDLDhSmrooTHS2D9tP9nyGdESjEzDAOICMyMMSXEGDMiYSt0zoK9B/NvvPcI4T/ryrVwAbgEMa6HKM7vAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"SuperTokens Core service initialization\"\n        title=\"SuperTokens Core service initialization\"\n        src=\"/static/8a0dba703edd532394acf8b688d35045/f058b/core-service-initialization.png\"\n        srcset=\"/static/8a0dba703edd532394acf8b688d35045/c26ae/core-service-initialization.png 158w,\n/static/8a0dba703edd532394acf8b688d35045/6bdcf/core-service-initialization.png 315w,\n/static/8a0dba703edd532394acf8b688d35045/f058b/core-service-initialization.png 630w,\n/static/8a0dba703edd532394acf8b688d35045/40601/core-service-initialization.png 945w,\n/static/8a0dba703edd532394acf8b688d35045/78612/core-service-initialization.png 1260w,\n/static/8a0dba703edd532394acf8b688d35045/58a91/core-service-initialization.png 1990w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></li>\n<li>Integrate<a href=\"https://supertokens.com/docs/quickstart/introduction\" target=\"_blank\" rel=\"nofollow\"> SuperTokens into your Frontend and Backend stack using the SuperTokens SDKs</a>. Alternatively, if you are starting from scratch you can use SuperTokens CLI tool to test it out! This is what we will be doing</li>\n</ol>\n<p><code class=\"language-text\">npx create-supertokens-app@latest</code></p>\n<h3 id=\"initialize-the-webauthn-recipes\" style=\"position:relative;\"><a href=\"#initialize-the-webauthn-recipes\" aria-label=\"initialize the webauthn recipes permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Initialize the WebAuthn recipes</h3>\n<p>Once you setup SuperTokens in your application you will need to initialize the WebAuthn recipes in both the frontend and backend SuperTokens configurations.</p>\n<blockquote>\n<p>Note: The following example configs were created by the SuperTokens CLI wizard with NextJs as the stack.</p>\n</blockquote>\n<h4 id=\"backend-configuration\" style=\"position:relative;\"><a href=\"#backend-configuration\" aria-label=\"backend configuration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Backend configuration</h4>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"40122514874561266000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`export let backendConfig = (): TypeInput => {\n    return {\n        supertokens: { \n            // this is the location of the SuperTokens core, try.supertokens.com is a demo core\n            connectionURI: &quot;http://try.supertokens.com&quot;,\n        },\n        appInfo,\n        // recipeList contains all the modules that you want to\n        // use from SuperTokens. See the full list here: https://supertokens.com/docs/guides\n        recipeList: [EmailPasswordNode.init(), SessionNode.init(), Dashboard.init(), UserRoles.init(), WebAuthN.init()],\n        isInServerlessEnv: true,\n        framework: &quot;custom&quot;,\n    };\n};`, `40122514874561266000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">let</span> backendConfig <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> TypeInput <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        supertokens<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> \n            <span class=\"token comment\">// this is the location of the SuperTokens core, try.supertokens.com is a demo core</span>\n            connectionURI<span class=\"token operator\">:</span> <span class=\"token string\">\"http://try.supertokens.com\"</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        appInfo<span class=\"token punctuation\">,</span>\n        <span class=\"token comment\">// recipeList contains all the modules that you want to</span>\n        <span class=\"token comment\">// use from SuperTokens. See the full list here: https://supertokens.com/docs/guides</span>\n        recipeList<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>EmailPasswordNode<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> SessionNode<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> Dashboard<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> UserRoles<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> WebAuthN<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        isInServerlessEnv<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n        framework<span class=\"token operator\">:</span> <span class=\"token string\">\"custom\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h4 id=\"frontend-configuration\" style=\"position:relative;\"><a href=\"#frontend-configuration\" aria-label=\"frontend configuration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Frontend configuration</h4>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"97492860113416540000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`export const frontendConfig = (): SuperTokensConfig => {\n    return {\n        appInfo,\n        recipeList: [EmailPasswordReact.init(), WebAuthn.init(), Session.init()],\n        windowHandler: (orig) => {\n            return {\n                ...orig,\n                location: {\n                    ...orig.location,\n                    getPathName: () => routerInfo.pathName!,\n                    assign: (url) => routerInfo.router!.push(url.toString()),\n                    setHref: (url) => routerInfo.router!.push(url.toString()),\n                },\n            };\n        },\n    };\n};\n`, `97492860113416540000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> frontendConfig <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> SuperTokensConfig <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        appInfo<span class=\"token punctuation\">,</span>\n        recipeList<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>EmailPasswordReact<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> WebAuthn<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> Session<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token function-variable function\">windowHandler</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>orig<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token operator\">...</span>orig<span class=\"token punctuation\">,</span>\n                location<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token operator\">...</span>orig<span class=\"token punctuation\">.</span>location<span class=\"token punctuation\">,</span>\n                    <span class=\"token function-variable function\">getPathName</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> routerInfo<span class=\"token punctuation\">.</span>pathName<span class=\"token operator\">!</span><span class=\"token punctuation\">,</span>\n                    <span class=\"token function-variable function\">assign</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> routerInfo<span class=\"token punctuation\">.</span>router<span class=\"token operator\">!</span><span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                    <span class=\"token function-variable function\">setHref</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> routerInfo<span class=\"token punctuation\">.</span>router<span class=\"token operator\">!</span><span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n</code></pre></div>\n<h4 id=\"test-the-setup\" style=\"position:relative;\"><a href=\"#test-the-setup\" aria-label=\"test the setup permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Test the setup</h4>\n<ul>\n<li>You can now run your the application and you should now have passwordless setup in your login experience! It’s as easy as that!</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/8920a2756096ee82a90b935628e958e5/31493/passkeys-setup.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 119.62025316455697%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAAACXBIWXMAABYlAAAWJQFJUiTwAAACjUlEQVQ4y62Uy2sTURTG82+4EhS1RSn1VbIpIj5wo25EqbWKpeB/I4j4oCIutNZWXIggiOAm7rRNMkmb9DVJJalJSl6TO+/HJ+dmriTpZEjFA7+5M3fO/eY7d2ZOJCWlIZCkFKTkXhIJiZNMEsE5Emmk0ojgP0fEdV0Qtm3DcRyIa8IDYJomYrEYYrHvyGYzYKoGwOvKo3WUR+cRz/O4srhJQXMEF/U8lMtlFAoFKIoC07L5g0SOyCdD3GGgoH+s1Wqo7O6iWq1CaTZQb7ZQbAK7zPNzMJhgp0vhVLjtR6AgndN+WJYVuriTUIcUKmOQZRmWbXe560eoQyFKe5bP51EqlVAsFqHpOndNb5KwLB/T5BWFlkwjY4xDIkTXJ+K6MGwXpo8b5pBC1zVeMrkTIb4113WgmQ6KDQc7jfZo2PwjCi9ZVRkqlQrKpRKHXAaFqWu8bIq+Dg3DQHZtHSurGWQya1jNrGFLziG//QtybhtyLo+tXJ6fb2zKaDHG11lWj6B4wo+lOA4Pn8TQyBjnyPHTOBU9h+s3biM6fhGHhkZx9MQZDI+M4cDBY/j46fNfI4EOmapiOZ7EckJC3CdBXSi1gqSUbs8l2/xciqNWb/gOrb2CtPH/EqK5dAkKsZ3fJTx+Ootnsy/x+u0CZ37xA+bm32PuXZs384t4/uIVHj56gvWNzWCH4glUVnT8Es5fvopbd6Zxc/I+pqYfYGJqhl9P3J3B5L0ZXLhyDaNnx/Hl67f2Hvpvu29z2FfJYb9eZx+0bQdM06HqBh8VVePwntiRF/iniEmC9oNG3TDQaLXQbDE0lBbqTYWj6npXHo3iHUSEWGcf7J0LiqD7NNflsFdskD7YOxcZZPF+mu0fb/wUCoONUhUAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"passkey setup\"\n        title=\"passkey setup\"\n        src=\"/static/8920a2756096ee82a90b935628e958e5/f058b/passkeys-setup.png\"\n        srcset=\"/static/8920a2756096ee82a90b935628e958e5/c26ae/passkeys-setup.png 158w,\n/static/8920a2756096ee82a90b935628e958e5/6bdcf/passkeys-setup.png 315w,\n/static/8920a2756096ee82a90b935628e958e5/f058b/passkeys-setup.png 630w,\n/static/8920a2756096ee82a90b935628e958e5/31493/passkeys-setup.png 664w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<ul>\n<li>Click the “Continue with passkey” prompt, the following pop-up should appear</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/5a40cae40c07c9a4fa6c8616706a075b/eafa0/passkey-prompt.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 110.75949367088609%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAACXBIWXMAABYlAAAWJQFJUiTwAAADFElEQVQ4y52Vy09TQRTG+wegJZC0Vfp+0SelhbYRKLUkLYlxIT5iY+Ki0BZI3BmTFgmFrSsTFrrTSnkY48aFCzdsSXizI9EtW9pboLw/cw65pdqHiZP8cs6de+ebM+fMnZFcXl6C2sXFBc7OznBycsKcnp4ypVIJ+XwexWKx3C9+Q9AYUYOsRHQatV+/fkIQig2/ETUkFBm19fV1zMzMIJPJsJ2ensbU1BTS6TQmJiaYVCqNVCrFfWSJyclJ7O3tlVcpOT8/54dsNguVSgWFQgGlUom2tjb2m5qayjQ3N0MqlTLki2xubrIGaZUFl5aW0NHRgVAohN7eXrZ9fX0IBAIYHBxkq9FooNfrodPpGPK1Wi12dnaqI1xYWIDZbEZPTw/cbjd8Ph/j9XrZ+v1+7ne5XEx3dzccDgevZHt7u1pwcXGRX9rtdha2Wq1sjUYjTCYTW3oWsVgs3E/pqSk4NzeHrq4uRKNROJ1OjsZgMHBe1Wp1TSgFJLi1tVUtOD8/zzP39/dDrbkaQPn5FyQoFqUqh3KZHFazDXaLAyajqRxFI+oKUoQqpQp+rx9ulwc2q+2PnNWDJt3Y2KgWzOVyMOpMiEQiCN4NIhgMcsUpn7Sd6kHLpp+iZoQymYwLQ9uBCiJWl6zoU38lVLS6gi0tLQiHw7yxaa95PB6uNk1C+5H8WjlcW1urvWSKsLOzE1arDXqdHgaDETqtjpclCtSqck1BivCm9AZ8d7xwup2w2C2wOW24pVRAflteFqzcgw0jzH76CK/Tj6eRZxgaeIwHoYcYCj3Ck3AU9wL3OYdU1fb2dv5LxCrTP726ulotOPtuFs8HYviW+YHcqy94/+IDsi8/4+vr73gTfwulSskFIDGqrhhpa2srVlZWrgXF83B5eRmxWAzjY+MYTY5iLDmGZGIUyUQSiXgCw8PDGBkZYUvE43EkEgm2u7u714LiOUZH/eHhIYSigIJQ4GN/P7+P/f0r6JkoFAoQBIGvhIODAxwdHfHY8olNDkF3w/HxcTWlK2hQJZXfiGnjO+Xv+0Sc4H8aCf4GSGJ9HzFUBDgAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"passkey prompt\"\n        title=\"passkey prompt\"\n        src=\"/static/5a40cae40c07c9a4fa6c8616706a075b/f058b/passkey-prompt.png\"\n        srcset=\"/static/5a40cae40c07c9a4fa6c8616706a075b/c26ae/passkey-prompt.png 158w,\n/static/5a40cae40c07c9a4fa6c8616706a075b/6bdcf/passkey-prompt.png 315w,\n/static/5a40cae40c07c9a4fa6c8616706a075b/f058b/passkey-prompt.png 630w,\n/static/5a40cae40c07c9a4fa6c8616706a075b/eafa0/passkey-prompt.png 939w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<ul>\n<li>Approve the passkey in your hardware device</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/3cc35990af91072e1ffd137b60dac2a6/47311/passkey-input.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 216.45569620253164%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAECAwX/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAgP/2gAMAwEAAhADEAAAAeJWRIIbDZVldtcb6xVA/8QAHBAAAwACAwEAAAAAAAAAAAAAAAECERIDIEEh/9oACAEBAAEFAvB/enpwpONTQnMoU3SpOWZcpvJ//8QAFhEBAQEAAAAAAAAAAAAAAAAAEAER/9oACAEDAQE/AXY//8QAFxEAAwEAAAAAAAAAAAAAAAAAAQIQEf/aAAgBAgEBPwGlTt//xAAdEAACAgIDAQAAAAAAAAAAAAAAAQIRIUEQMDFh/9oACAEBAAY/At9N2elJmy4xkypKn94w2jOT/8QAHxAAAwABBAMBAAAAAAAAAAAAAAERUSExYYEQQXGR/9oACAEBAAE/IanD2eHrS9n2lxRX0hpqHuPs1RkdumrHyDTKcoTi3E8DKL0YAhfmYxj1m2Wf/9oADAMBAAIAAwAAABCoCzKTz//EABcRAQEBAQAAAAAAAAAAAAAAAAEQACH/2gAIAQMBAT8Qz2BF/8QAGBEBAQADAAAAAAAAAAAAAAAAAQAQEXH/2gAIAQIBAT8Qt3ZaTP8A/8QAHhABAQEBAQABBQAAAAAAAAAAAREAITFRQWGBkaH/2gAIAQEAAT8QTE4cOS49xC0ADFIC4/WYIo3Dqn5zQeeJgEgOdvzkCW2ccj0CqGWdal0YVXi93ggfbzSRLI8uRRawjPndIPmWA1scN9K8Vr/d/9k='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"passkey approval\"\n        title=\"passkey approval\"\n        src=\"/static/3cc35990af91072e1ffd137b60dac2a6/828fb/passkey-input.jpg\"\n        srcset=\"/static/3cc35990af91072e1ffd137b60dac2a6/ff44c/passkey-input.jpg 158w,\n/static/3cc35990af91072e1ffd137b60dac2a6/a6688/passkey-input.jpg 315w,\n/static/3cc35990af91072e1ffd137b60dac2a6/828fb/passkey-input.jpg 630w,\n/static/3cc35990af91072e1ffd137b60dac2a6/0ede0/passkey-input.jpg 945w,\n/static/3cc35990af91072e1ffd137b60dac2a6/47311/passkey-input.jpg 1080w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<ul>\n<li>Congratulations you are logged in!</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/36e0e1e6068da4792610434ee7d33b72/1568e/success.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 55.69620253164557%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABo0lEQVQoz3WTzXKbMBSFed6+Rp+pyy666rqLdto6doyx+RFCP0AMCKGvI0g8jZOI+eYM3MPR1R1I+q6ltQarNVapV5g7oqfVms5oertxtZqhs0zXDjf0JNZoai0oVEnRFCt5VFVQ2opKVVRarCqi6opSlVR6Q+gSaQVtq9bQpJE1l1FwQZIjb5rNgp14ZDef+OPSVX9PRw4+J6dZff9TW7F2mkghKIcagUEEvVKjKWbFSeU8ujMP44n9dGY3pmRzSf3su0E8ZcW1NSS1qLgOV+JaQmCJSiDw8Yr15aZhvYxu6Fu9BQ7DsBrDsoB3sMzgZ1g8RgpEnlFkKS5uHJ/PEbdp2LaOgZ29C2Tq8E+a6rTnfPhLle4ps5TT8USdF8gspTg8cPz1E1sW0FmCc1ugeicw+JngHX4amccB7xzeXPDpd/zlB3582mrDwOImcG47FaBVQ2s0iawF40vgq0k93x2+wpdP8O0zuP6N4+UdrdQWGD+bcRw3Qwh3xLl6grsS5vGd+sY2Q01rDEn8S2K7MTh2+5YaKRuklB/UBaqRGK3o25Z/qe5LoDwg3WoAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"passkey success\"\n        title=\"passkey success\"\n        src=\"/static/36e0e1e6068da4792610434ee7d33b72/f058b/success.png\"\n        srcset=\"/static/36e0e1e6068da4792610434ee7d33b72/c26ae/success.png 158w,\n/static/36e0e1e6068da4792610434ee7d33b72/6bdcf/success.png 315w,\n/static/36e0e1e6068da4792610434ee7d33b72/f058b/success.png 630w,\n/static/36e0e1e6068da4792610434ee7d33b72/1568e/success.png 892w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<h2 id=\"what-does-supertokens-enable\" style=\"position:relative;\"><a href=\"#what-does-supertokens-enable\" aria-label=\"what does supertokens enable permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What does SuperTokens enable?</h2>\n<h3 id=\"webauthn-support\" style=\"position:relative;\"><a href=\"#webauthn-support\" aria-label=\"webauthn support permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>WebAuthn Support</h3>\n<p>SuperTokens includes <strong>WebAuthn-based passwordless login</strong>, offering full support for passkey-style authentication.</p>\n<h3 id=\"flexible-authentication-flows\" style=\"position:relative;\"><a href=\"#flexible-authentication-flows\" aria-label=\"flexible authentication flows permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Flexible Authentication Flows</h3>\n<p>Want to support users with passwords, OTP, and passkeys in one app? SuperTokens enables hybrid login models with configurable flows.</p>\n<h3 id=\"security-first-architecture\" style=\"position:relative;\"><a href=\"#security-first-architecture\" aria-label=\"security first architecture permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Security-First Architecture</h3>\n<p>SuperTokens is open-source and built with security and developer control in mind. You can enforce domain-bound credentials and handle fallback logic without black-box limitations.</p>\n<h2 id=\"when-should-you-choose-passkeys-over-passwords\" style=\"position:relative;\"><a href=\"#when-should-you-choose-passkeys-over-passwords\" aria-label=\"when should you choose passkeys over passwords permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>When Should You Choose Passkeys Over Passwords?</h2>\n<h3 id=\"high-security-apps\" style=\"position:relative;\"><a href=\"#high-security-apps\" aria-label=\"high security apps permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>High-Security Apps</h3>\n<p>Applications that handle:</p>\n<ul>\n<li><strong>Financial data</strong> (e.g., banking)</li>\n<li><strong>Healthcare records</strong></li>\n<li><strong>Enterprise infrastructure</strong></li>\n</ul>\n<p>Can benefit significantly from the phishing resistance and strong assurance offered by passkeys, since the fallout from a comprimised account can be catastrophic.</p>\n<h3 id=\"scalability\" style=\"position:relative;\"><a href=\"#scalability\" aria-label=\"scalability permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Scalability</h3>\n<p>Passkeys remove the burden of forgotten password flows and reduce support overhead—making it easier to scale user authentication.</p>\n<h3 id=\"user-retention\" style=\"position:relative;\"><a href=\"#user-retention\" aria-label=\"user retention permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>User Retention</h3>\n<p>A smoother login experience reduces drop-off during sign-in and account creation, especially on mobile.</p>\n<h2 id=\"challenges-of-switching-to-passkeys\" style=\"position:relative;\"><a href=\"#challenges-of-switching-to-passkeys\" aria-label=\"challenges of switching to passkeys permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Challenges of Switching to Passkeys</h2>\n<h3 id=\"device-limitations\" style=\"position:relative;\"><a href=\"#device-limitations\" aria-label=\"device limitations permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Device Limitations</h3>\n<p>Not all devices or browsers fully support WebAuthn. Older smartphones or niche browsers may lack compatibility.</p>\n<h3 id=\"user-familiarity\" style=\"position:relative;\"><a href=\"#user-familiarity\" aria-label=\"user familiarity permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>User Familiarity</h3>\n<p>Users may not understand what a passkey is. Onboarding flows and education are critical for adoption.</p>\n<h3 id=\"fallback-systems\" style=\"position:relative;\"><a href=\"#fallback-systems\" aria-label=\"fallback systems permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Fallback Systems</h3>\n<p>You still need to offer:</p>\n<ul>\n<li>Email-based magic links</li>\n<li>OTPs via SMS/email</li>\n<li>Social login or recovery flows</li>\n</ul>\n<p>These ensure users aren’t locked out if their device is lost.</p>\n<h2 id=\"the-future-of-authentication--are-passwords-dead\" style=\"position:relative;\"><a href=\"#the-future-of-authentication--are-passwords-dead\" aria-label=\"the future of authentication  are passwords dead permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Future of Authentication – Are Passwords Dead?</h2>\n<h3 id=\"industry-trends\" style=\"position:relative;\"><a href=\"#industry-trends\" aria-label=\"industry trends permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Industry Trends</h3>\n<ul>\n<li><strong>Apple, Google, and Microsoft</strong> have committed to passkeys as the future of authentication.</li>\n<li><strong>Passkeys are now supported across major platforms and browsers</strong>.</li>\n</ul>\n<h3 id=\"open-standards\" style=\"position:relative;\"><a href=\"#open-standards\" aria-label=\"open standards permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Open Standards</h3>\n<ul>\n<li><strong>FIDO Alliance</strong> and <strong>WebAuthn</strong> are becoming global standards.</li>\n<li>Regulatory and compliance landscapes are also evolving to favor phishing-resistant methods.</li>\n</ul>\n<h3 id=\"legacy-systems\" style=\"position:relative;\"><a href=\"#legacy-systems\" aria-label=\"legacy systems permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Legacy Systems</h3>\n<p>Despite their weaknesses, passwords may stick around in hybrid systems or legacy environments for a while. The transition is happening—but it’s gradual.</p>\n<hr>\n<p><strong>Final Thoughts</strong></p>\n<p>Passwords have served us well—but their time is coming to an end. Passkeys offer a safer, simpler, and more modern approach to authentication. While challenges remain in adoption, the long-term benefits in security and user experience are hard to ignore.</p>\n<p>If you’re building an app today, consider building with passkeys at the core—or at the very least, give your users the choice. Platforms like SuperTokens can help you get there faster and safer.</p>","frontmatter":{"date":"June 25, 2025","title":"Passkeys vs Passwords – Which Is the Better Authentication Choice?","cover":"passkeys-vs-passwords.png","author":"Joel Coutinho","description":"Explore the differences between passkeys and passwords in modern authentication. Learn why passkeys are more secure, user-friendly, and built for the future of login systems."},"fields":{"slug":"/passkeys-vs-passwords/"}},"site":{"siteMetadata":{"title":"SuperTokens Blog"}}},"pageContext":{"id":"2ec87779-07ae-5f54-aa3b-a0edd5c427fa","fields__slug":"/passkeys-vs-passwords/","__params":{"fields__slug":"passkeys-vs-passwords"}}},
    "staticQueryHashes": []}