{"version":1,"pages":[{"id":"vH0xmrPpAUvzdQaRIhYB","title":"What This Is","pathname":"/","siteSpaceId":"sitesp_RfSnj","icon":"lightbulb-exclamation-on","breadcrumbs":[{"label":"Documentation"}]},{"id":"R7XmICYloT6lht1r5tZK","title":"Getting Started","pathname":"/integration-guides/example-setups","siteSpaceId":"sitesp_RfSnj","icon":"flag-checkered","description":"Let's get your app authenticated!","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"4DwF1XPwmeeluLK1EN7m","title":"Framework Agnostic Adapter","pathname":"/integration-guides/usage","siteSpaceId":"sitesp_RfSnj","icon":"person-snowboarding","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"91pQIM8gQci1OGg7Ool5","title":"TanStack Router/Start","pathname":"/integration-guides/tanstack-router-start","siteSpaceId":"sitesp_RfSnj","icon":"umbrella-beach","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"d1qbPv2oiUEBc6J3j5sN","title":"TanStack Start","pathname":"/integration-guides/tanstack-router-start/tanstack-start","siteSpaceId":"sitesp_RfSnj","icon":"umbrella-beach","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"TanStack Router/Start","icon":"umbrella-beach"}]},{"id":"QUB3CQl6dhCDJw69LePi","title":"TanStack Router","pathname":"/integration-guides/tanstack-router-start/react-router","siteSpaceId":"sitesp_RfSnj","icon":"umbrella-beach","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"TanStack Router/Start","icon":"umbrella-beach"}]},{"id":"Gemwcbm0G6uqPI4c1liz","title":"React Router","pathname":"/integration-guides/react-router","siteSpaceId":"sitesp_RfSnj","icon":"route","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"QgaTjU1tbbDm1MI8Edkm","title":"Angular","pathname":"/integration-guides/angular","siteSpaceId":"sitesp_RfSnj","icon":"angular","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"nB5sXXe1XjHQImOClLSU","title":"Next.js","pathname":"/integration-guides/next.js","siteSpaceId":"sitesp_RfSnj","icon":"triangle","description":"Use oidc-spa in a Next.js App Router app.","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"I1BVXgK0Ze4V5L9VMLJs","title":"Nuxt","pathname":"/integration-guides/nuxt","siteSpaceId":"sitesp_RfSnj","icon":"mountains","description":"Use oidc-spa in a pure Nuxt SPA app.","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"yolKsccF0yDQcZTXQnPo","title":"Backend Token Validation","pathname":"/integration-guides/backend-token-validation","siteSpaceId":"sitesp_RfSnj","icon":"arrow-right-arrow-left","description":"Creating a OAuth2 enabled resource server.","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"jPYFd1DOgIwEr8YEhJ6x","title":"tRPC","pathname":"/integration-guides/backend-token-validation/trpc","siteSpaceId":"sitesp_RfSnj","icon":"cubes","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"U95czlJaG5VGFSiLaeUm","title":"NestJS","pathname":"/integration-guides/backend-token-validation/nestjs","siteSpaceId":"sitesp_RfSnj","icon":"paw-claws","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"5uhFykcwc3KGWmQA2FfM","title":"TanStack Start","pathname":"/integration-guides/backend-token-validation/tanstack-start","siteSpaceId":"sitesp_RfSnj","icon":"umbrella-beach","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"D7oSdXrY8PpRNgwq8P0j","title":"Express.js","pathname":"/integration-guides/backend-token-validation/express.js","siteSpaceId":"sitesp_RfSnj","icon":"e","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"YklVLJe1CNTx5tAEmDL3","title":"Koa","pathname":"/integration-guides/backend-token-validation/koa","siteSpaceId":"sitesp_RfSnj","icon":"leaf","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"dpMjSkwHciZoaYThM3xK","title":"Fastify","pathname":"/integration-guides/backend-token-validation/fastify","siteSpaceId":"sitesp_RfSnj","icon":"cat-space","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"ouqjtmsZVJywv5rMklIc","title":"Hono","pathname":"/integration-guides/backend-token-validation/hono","siteSpaceId":"sitesp_RfSnj","icon":"fire","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"8IHPKsisQp1ZEgtiRmTI","title":"node:http","pathname":"/integration-guides/backend-token-validation/node-http","siteSpaceId":"sitesp_RfSnj","icon":"node-js","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"d2qm0aCjKdy6kvR8uvUR","title":"Deno.serve","pathname":"/integration-guides/backend-token-validation/deno.serve","siteSpaceId":"sitesp_RfSnj","icon":"dinosaur","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"vNMUshRNFWPeFKiFOtWv","title":"Bun.serve","pathname":"/integration-guides/backend-token-validation/bun.serve","siteSpaceId":"sitesp_RfSnj","icon":"onion","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"7iLCD0QZbmGywDt5qJd7","title":"Cloudflare Workers","pathname":"/integration-guides/backend-token-validation/cloudflare-workers","siteSpaceId":"sitesp_RfSnj","icon":"cloudflare","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"yfnnatrSBynS6LZmpmMQ","title":"Vercel Edge","pathname":"/integration-guides/backend-token-validation/vercel-edge","siteSpaceId":"sitesp_RfSnj","icon":"triangle","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"2h9b2JIP2ifZUPpmy07q","title":"WebSocket","pathname":"/integration-guides/backend-token-validation/websocket","siteSpaceId":"sitesp_RfSnj","icon":"right-left-large","description":"Securing a WebSocket connection","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"5zhvDapwmFpSUUyRfzBp","title":"Mock Modes","pathname":"/integration-guides/backend-token-validation/mock-modes","siteSpaceId":"sitesp_RfSnj","icon":"masks-theater","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"5gpZtUHNuQnwl8hxu3YC","title":"Keycloak","pathname":"/providers-configuration/keycloak","siteSpaceId":"sitesp_RfSnj","icon":"code-simple","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"4lJxIBw85ly46Yw5FMsI","title":"Auth0","pathname":"/providers-configuration/auth0","siteSpaceId":"sitesp_RfSnj","icon":"shield-quartered","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"Bd5Knc63f7JKWSZO9p42","title":"Microsoft Entra ID","pathname":"/providers-configuration/microsoft-entra-id","siteSpaceId":"sitesp_RfSnj","icon":"microsoft","description":"Formerly Azure Active Directory","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"pgH35LSpFMSJsCaifWCU","title":"Other OIDC Provider","pathname":"/providers-configuration/other","siteSpaceId":"sitesp_RfSnj","icon":"sliders","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"glciYAdDQPnmc0fwtVhZ","title":"Auto Login","pathname":"/features/auto-login","siteSpaceId":"sitesp_RfSnj","icon":"shield","description":"Enforce authentication everywhere in your app.","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"tpyBmXI4q9q1dCCuf6ZY","title":"Auto Logout","pathname":"/features/auto-logout","siteSpaceId":"sitesp_RfSnj","icon":"timer","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"DrwNXR5CtJzJuR4m8RUq","title":"Debug and Error Handling","pathname":"/features/error-management","siteSpaceId":"sitesp_RfSnj","icon":"message-exclamation","description":"Gracefully handle authentication issues","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"3ihTpAXj8fpQE6T3N8Mf","title":"Error Handling - No AutoLogin","pathname":"/features/error-management/error-handling-no-autologin","siteSpaceId":"sitesp_RfSnj","breadcrumbs":[{"label":"Documentation"},{"label":"features"},{"label":"Debug and Error Handling","icon":"message-exclamation"}]},{"id":"NpMDaypbUoQjAqBEbyY0","title":"Error Handling - With AutoLogin","pathname":"/features/error-management/error-handling-with-autologin","siteSpaceId":"sitesp_RfSnj","breadcrumbs":[{"label":"Documentation"},{"label":"features"},{"label":"Debug and Error Handling","icon":"message-exclamation"}]},{"id":"hplelJgv3qw1OYSJyUii","title":"Non Blocking Rendering","pathname":"/features/non-blocking-rendering","siteSpaceId":"sitesp_RfSnj","icon":"gauge-max","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"rmKZukO1gbrHASOsjbaY","title":"Talking to multiple APIs (with different access tokens)","pathname":"/features/talking-to-multiple-apis-with-different-access-tokens","siteSpaceId":"sitesp_RfSnj","icon":"arrows-to-circle","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"WBzrPI2PGowF0zoptSk9","title":"Tokens Renewal","pathname":"/features/tokens-renewal","siteSpaceId":"sitesp_RfSnj","icon":"arrows-rotate-reverse","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"xwvm8d1eSV4Mxy2CXUUb","title":"User Account Management","pathname":"/features/user-account-management","siteSpaceId":"sitesp_RfSnj","icon":"file-user","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"CtQbmISXVEyH80C2rMuI","title":"User Session Initialization","pathname":"/features/user-session-initialization","siteSpaceId":"sitesp_RfSnj","icon":"square-caret-up","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"bzSjDHqpAfnyHXIinLPy","title":"Keycloak Utils","pathname":"/features/keycloak-utils","siteSpaceId":"sitesp_RfSnj","icon":"code-simple","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"U7NXkYENwaWcbAO6iQDb","title":"Overview","pathname":"/security-features/overview","siteSpaceId":"sitesp_RfSnj","icon":"lighthouse","description":"How oidc-spa mitigates the risks of token exposure","breadcrumbs":[{"label":"Documentation"},{"label":"Security Features"}]},{"id":"OQPfLaz21wcSz22qMpf2","title":"Browser Runtime Freeze","pathname":"/security-features/browser-runtime-freeze","siteSpaceId":"sitesp_RfSnj","icon":"igloo","description":"Ensuring the integrity of the browser runtime environment.","breadcrumbs":[{"label":"Documentation"},{"label":"Security Features"}]},{"id":"AkX224WAW7UAYAoUymBd","title":"DPoP","pathname":"/security-features/dpop","siteSpaceId":"sitesp_RfSnj","icon":"receipt","description":"OAuth 2.0 Demonstrating Proof-of-Possession","breadcrumbs":[{"label":"Documentation"},{"label":"Security Features"}]},{"id":"zmd4gn3akUmtOPPYQAXq","title":"Token Substitution","pathname":"/security-features/token-substitution","siteSpaceId":"sitesp_RfSnj","icon":"cards-blank","breadcrumbs":[{"label":"Documentation"},{"label":"Security Features"}]},{"id":"U5aggGhQecNR7qbmoQsQ","title":"Migrating from Keycloak-js","pathname":"/resources/migrating-from-keycloak-js","siteSpaceId":"sitesp_RfSnj","icon":"arrow-up-to-dotted-line","description":"Polyfilling keycloak-js with oidc-spa","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"PEVVAcvpgrhNHpuD5ykF","title":"Third‑party cookies and session restoration","pathname":"/resources/third-party-cookies-and-session-restoration","siteSpaceId":"sitesp_RfSnj","icon":"cookie","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"L2FgCwqcTwwPph2YPsgt","title":"CSP Configuration","pathname":"/resources/csp-configuration","siteSpaceId":"sitesp_RfSnj","icon":"user-police","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"1YIPuLGi53e55HXQRyls","title":"Why No Client Secret?","pathname":"/resources/why-no-client-secret","siteSpaceId":"sitesp_RfSnj","icon":"question","description":"Why Doesn't oidc-spa Require a Client Secret?","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"XXkvNZFbvuiDBJIBN3Ab","title":"JWT Of the Access Token","pathname":"/resources/jwt-of-the-access-token","siteSpaceId":"sitesp_RfSnj","icon":"brackets-curly","description":"And why it's not supposed to be read on the client side.","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"kQKDeFzrKB4J14oNL10h","title":"Bundle Size","pathname":"/resources/bundle-size","siteSpaceId":"sitesp_RfSnj","icon":"scale-unbalanced-flip","description":"Understanding oidc-spa’s impact on your bundle size","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"yG1H9oPTd4jZ9IbZJa5Z","title":"Discord Server","pathname":"/resources/discord-server","siteSpaceId":"sitesp_RfSnj","icon":"discord","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"y5StFTljslWbfZEnBSKA","title":"Sponsors","pathname":"/sponsors","siteSpaceId":"sitesp_RfSnj","icon":"star","description":"Backers of the project","breadcrumbs":[{"label":"Documentation"}]},{"id":"vH0xmrPpAUvzdQaRIhYB","title":"What This Is","pathname":"/v9","siteSpaceId":"sitesp_RfotF","icon":"lightbulb-exclamation-on","breadcrumbs":[{"label":"Documentation"}]},{"id":"R7XmICYloT6lht1r5tZK","title":"Getting Started","pathname":"/v9/integration-guides/example-setups","siteSpaceId":"sitesp_RfotF","icon":"flag-checkered","description":"Let's get your app authenticated!","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"4DwF1XPwmeeluLK1EN7m","title":"Framework Agnostic Adapter","pathname":"/v9/integration-guides/usage","siteSpaceId":"sitesp_RfotF","icon":"person-snowboarding","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"91pQIM8gQci1OGg7Ool5","title":"TanStack Router/Start","pathname":"/v9/integration-guides/tanstack-router-start","siteSpaceId":"sitesp_RfotF","icon":"umbrella-beach","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"d1qbPv2oiUEBc6J3j5sN","title":"TanStack Start","pathname":"/v9/integration-guides/tanstack-router-start/tanstack-start","siteSpaceId":"sitesp_RfotF","icon":"umbrella-beach","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"TanStack Router/Start","icon":"umbrella-beach"}]},{"id":"QUB3CQl6dhCDJw69LePi","title":"TanStack Router","pathname":"/v9/integration-guides/tanstack-router-start/react-router","siteSpaceId":"sitesp_RfotF","icon":"umbrella-beach","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"TanStack Router/Start","icon":"umbrella-beach"}]},{"id":"Gemwcbm0G6uqPI4c1liz","title":"React Router","pathname":"/v9/integration-guides/react-router","siteSpaceId":"sitesp_RfotF","icon":"route","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"QgaTjU1tbbDm1MI8Edkm","title":"Angular","pathname":"/v9/integration-guides/angular","siteSpaceId":"sitesp_RfotF","icon":"angular","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"yolKsccF0yDQcZTXQnPo","title":"Backend Token Validation","pathname":"/v9/integration-guides/backend-token-validation","siteSpaceId":"sitesp_RfotF","icon":"arrow-right-arrow-left","description":"Creating a OAuth2 enabled resource server.","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"jPYFd1DOgIwEr8YEhJ6x","title":"tRPC","pathname":"/v9/integration-guides/backend-token-validation/trpc","siteSpaceId":"sitesp_RfotF","icon":"cubes","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"U95czlJaG5VGFSiLaeUm","title":"NestJS","pathname":"/v9/integration-guides/backend-token-validation/nestjs","siteSpaceId":"sitesp_RfotF","icon":"paw-claws","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"5uhFykcwc3KGWmQA2FfM","title":"TanStack Start","pathname":"/v9/integration-guides/backend-token-validation/tanstack-start","siteSpaceId":"sitesp_RfotF","icon":"umbrella-beach","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"D7oSdXrY8PpRNgwq8P0j","title":"Express.js","pathname":"/v9/integration-guides/backend-token-validation/express.js","siteSpaceId":"sitesp_RfotF","icon":"e","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"YklVLJe1CNTx5tAEmDL3","title":"Koa","pathname":"/v9/integration-guides/backend-token-validation/koa","siteSpaceId":"sitesp_RfotF","icon":"leaf","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"dpMjSkwHciZoaYThM3xK","title":"Fastify","pathname":"/v9/integration-guides/backend-token-validation/fastify","siteSpaceId":"sitesp_RfotF","icon":"cat-space","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"ouqjtmsZVJywv5rMklIc","title":"Hono","pathname":"/v9/integration-guides/backend-token-validation/hono","siteSpaceId":"sitesp_RfotF","icon":"fire","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"8IHPKsisQp1ZEgtiRmTI","title":"node:http","pathname":"/v9/integration-guides/backend-token-validation/node-http","siteSpaceId":"sitesp_RfotF","icon":"node-js","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"d2qm0aCjKdy6kvR8uvUR","title":"Deno.serve","pathname":"/v9/integration-guides/backend-token-validation/deno.serve","siteSpaceId":"sitesp_RfotF","icon":"dinosaur","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"vNMUshRNFWPeFKiFOtWv","title":"Bun.serve","pathname":"/v9/integration-guides/backend-token-validation/bun.serve","siteSpaceId":"sitesp_RfotF","icon":"onion","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"7iLCD0QZbmGywDt5qJd7","title":"Cloudflare Workers","pathname":"/v9/integration-guides/backend-token-validation/cloudflare-workers","siteSpaceId":"sitesp_RfotF","icon":"cloudflare","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"yfnnatrSBynS6LZmpmMQ","title":"Vercel Edge","pathname":"/v9/integration-guides/backend-token-validation/vercel-edge","siteSpaceId":"sitesp_RfotF","icon":"triangle","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"2h9b2JIP2ifZUPpmy07q","title":"WebSocket","pathname":"/v9/integration-guides/backend-token-validation/websocket","siteSpaceId":"sitesp_RfotF","icon":"right-left-large","description":"Securing a WebSocket connection","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"5zhvDapwmFpSUUyRfzBp","title":"Mock Modes","pathname":"/v9/integration-guides/backend-token-validation/mock-modes","siteSpaceId":"sitesp_RfotF","icon":"masks-theater","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"5gpZtUHNuQnwl8hxu3YC","title":"Keycloak","pathname":"/v9/providers-configuration/keycloak","siteSpaceId":"sitesp_RfotF","icon":"code-simple","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"4lJxIBw85ly46Yw5FMsI","title":"Auth0","pathname":"/v9/providers-configuration/auth0","siteSpaceId":"sitesp_RfotF","icon":"shield-quartered","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"Bd5Knc63f7JKWSZO9p42","title":"Microsoft Entra ID","pathname":"/v9/providers-configuration/microsoft-entra-id","siteSpaceId":"sitesp_RfotF","icon":"microsoft","description":"Formerly Azure Active Directory","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"RzVNs4KHTWbpdCOaViUK","title":"Clerk","pathname":"/v9/providers-configuration/clerk","siteSpaceId":"sitesp_RfotF","icon":"circle","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"WkfVnILqpMQsx4qIJPhd","title":"Google OAuth 2.0","pathname":"/v9/providers-configuration/google-oauth","siteSpaceId":"sitesp_RfotF","icon":"google","description":"Implement \"Login with Google\"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"pgH35LSpFMSJsCaifWCU","title":"Other OIDC Provider","pathname":"/v9/providers-configuration/other","siteSpaceId":"sitesp_RfotF","icon":"sliders","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"glciYAdDQPnmc0fwtVhZ","title":"Auto Login","pathname":"/v9/features/auto-login","siteSpaceId":"sitesp_RfotF","icon":"shield","description":"Enforce authentication everywhere in your app.","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"tpyBmXI4q9q1dCCuf6ZY","title":"Auto Logout","pathname":"/v9/features/auto-logout","siteSpaceId":"sitesp_RfotF","icon":"timer","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"DrwNXR5CtJzJuR4m8RUq","title":"Debug and Error Handling","pathname":"/v9/features/error-management","siteSpaceId":"sitesp_RfotF","icon":"message-exclamation","description":"Gracefully handle authentication issues","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"3ihTpAXj8fpQE6T3N8Mf","title":"Error Handling - No AutoLogin","pathname":"/v9/features/error-management/error-handling-no-autologin","siteSpaceId":"sitesp_RfotF","breadcrumbs":[{"label":"Documentation"},{"label":"features"},{"label":"Debug and Error Handling","icon":"message-exclamation"}]},{"id":"NpMDaypbUoQjAqBEbyY0","title":"Error Handling - With AutoLogin","pathname":"/v9/features/error-management/error-handling-with-autologin","siteSpaceId":"sitesp_RfotF","breadcrumbs":[{"label":"Documentation"},{"label":"features"},{"label":"Debug and Error Handling","icon":"message-exclamation"}]},{"id":"hplelJgv3qw1OYSJyUii","title":"Non Blocking Rendering","pathname":"/v9/features/non-blocking-rendering","siteSpaceId":"sitesp_RfotF","icon":"gauge-max","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"rmKZukO1gbrHASOsjbaY","title":"Talking to multiple APIs (with different access tokens)","pathname":"/v9/features/talking-to-multiple-apis-with-different-access-tokens","siteSpaceId":"sitesp_RfotF","icon":"arrows-to-circle","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"WBzrPI2PGowF0zoptSk9","title":"Tokens Renewal","pathname":"/v9/features/tokens-renewal","siteSpaceId":"sitesp_RfotF","icon":"arrows-rotate-reverse","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"CtQbmISXVEyH80C2rMuI","title":"User Session Initialization","pathname":"/v9/features/user-session-initialization","siteSpaceId":"sitesp_RfotF","icon":"square-caret-up","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"xwvm8d1eSV4Mxy2CXUUb","title":"User Account Management","pathname":"/v9/features/user-account-management","siteSpaceId":"sitesp_RfotF","icon":"file-user","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"bzSjDHqpAfnyHXIinLPy","title":"Keycloak Utils","pathname":"/v9/features/keycloak-utils","siteSpaceId":"sitesp_RfotF","icon":"code-simple","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"U7NXkYENwaWcbAO6iQDb","title":"Overview","pathname":"/v9/security-features/overview","siteSpaceId":"sitesp_RfotF","icon":"lighthouse","description":"How oidc-spa mitigates the risks of token exposure","breadcrumbs":[{"label":"Documentation"},{"label":"Security Features"}]},{"id":"OQPfLaz21wcSz22qMpf2","title":"Browser Runtime Freeze","pathname":"/v9/security-features/browser-runtime-freeze","siteSpaceId":"sitesp_RfotF","icon":"igloo","description":"Ensuring the integrity of the browser runtime environment.","breadcrumbs":[{"label":"Documentation"},{"label":"Security Features"}]},{"id":"AkX224WAW7UAYAoUymBd","title":"DPoP","pathname":"/v9/security-features/dpop","siteSpaceId":"sitesp_RfotF","icon":"receipt","description":"OAuth 2.0 Demonstrating Proof-of-Possession","breadcrumbs":[{"label":"Documentation"},{"label":"Security Features"}]},{"id":"zmd4gn3akUmtOPPYQAXq","title":"Token Substitution","pathname":"/v9/security-features/token-substitution","siteSpaceId":"sitesp_RfotF","icon":"cards-blank","breadcrumbs":[{"label":"Documentation"},{"label":"Security Features"}]},{"id":"U5aggGhQecNR7qbmoQsQ","title":"Migrating from Keycloak-js","pathname":"/v9/resources/migrating-from-keycloak-js","siteSpaceId":"sitesp_RfotF","icon":"arrow-up-to-dotted-line","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"PEVVAcvpgrhNHpuD5ykF","title":"Third‑party cookies and session restoration","pathname":"/v9/resources/third-party-cookies-and-session-restoration","siteSpaceId":"sitesp_RfotF","icon":"cookie","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"L2FgCwqcTwwPph2YPsgt","title":"CSP Configuration","pathname":"/v9/resources/csp-configuration","siteSpaceId":"sitesp_RfotF","icon":"user-police","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"1YIPuLGi53e55HXQRyls","title":"Why No Client Secret?","pathname":"/v9/resources/why-no-client-secret","siteSpaceId":"sitesp_RfotF","icon":"question","description":"Why Doesn't oidc-spa Require a Client Secret?","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"XXkvNZFbvuiDBJIBN3Ab","title":"JWT Of the Access Token","pathname":"/v9/resources/jwt-of-the-access-token","siteSpaceId":"sitesp_RfotF","icon":"brackets-curly","description":"And why it's not supposed to be read on the client side.","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"kQKDeFzrKB4J14oNL10h","title":"Bundle Size","pathname":"/v9/resources/bundle-size","siteSpaceId":"sitesp_RfotF","icon":"scale-unbalanced-flip","description":"Understanding oidc-spa’s impact on your bundle size","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"yG1H9oPTd4jZ9IbZJa5Z","title":"Discord Server","pathname":"/v9/resources/discord-server","siteSpaceId":"sitesp_RfotF","icon":"discord","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"y5StFTljslWbfZEnBSKA","title":"Sponsors","pathname":"/v9/sponsors","siteSpaceId":"sitesp_RfotF","icon":"star","description":"Backers of the project","breadcrumbs":[{"label":"Documentation"}]},{"id":"vH0xmrPpAUvzdQaRIhYB","title":"Getting Started","pathname":"/v8","siteSpaceId":"sitesp_HGMyw","icon":"sign-posts-wrench","description":"","breadcrumbs":[{"label":"Documentation"}]},{"id":"4DwF1XPwmeeluLK1EN7m","title":"Framework Agnostic Adapter","pathname":"/v8/integration-guides/usage","siteSpaceId":"sitesp_HGMyw","icon":"person-snowboarding","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"91pQIM8gQci1OGg7Ool5","title":"TanStack Router/Start","pathname":"/v8/integration-guides/tanstack-router-start","siteSpaceId":"sitesp_HGMyw","icon":"umbrella-beach","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"d1qbPv2oiUEBc6J3j5sN","title":"TanStack Start","pathname":"/v8/integration-guides/tanstack-router-start/tanstack-start","siteSpaceId":"sitesp_HGMyw","icon":"umbrella-beach","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"TanStack Router/Start","icon":"umbrella-beach"}]},{"id":"QUB3CQl6dhCDJw69LePi","title":"TanStack Router","pathname":"/v8/integration-guides/tanstack-router-start/react-router","siteSpaceId":"sitesp_HGMyw","icon":"umbrella-beach","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"TanStack Router/Start","icon":"umbrella-beach"}]},{"id":"Gemwcbm0G6uqPI4c1liz","title":"React Router","pathname":"/v8/integration-guides/react-router","siteSpaceId":"sitesp_HGMyw","icon":"route","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"QgaTjU1tbbDm1MI8Edkm","title":"Angular","pathname":"/v8/integration-guides/angular","siteSpaceId":"sitesp_HGMyw","icon":"angular","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"z0JgWRLWtpL6Fm9ySeSW","title":"Backend Token Validation","pathname":"/v8/integration-guides/backend-token-validation","siteSpaceId":"sitesp_HGMyw","icon":"arrow-right-arrow-left","description":"Creating a OAuth2 enabled resource server.","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"}]},{"id":"wvKgaZP5EV2yqHfEJb4x","title":"tRPC","pathname":"/v8/integration-guides/backend-token-validation/trpc","siteSpaceId":"sitesp_HGMyw","icon":"cubes","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"SLeDDFJqwPWa5fV3bBKB","title":"NestJS","pathname":"/v8/integration-guides/backend-token-validation/nestjs","siteSpaceId":"sitesp_HGMyw","icon":"paw-claws","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"s3OfVtby3D9HUDTjYCqz","title":"TanStack Start","pathname":"/v8/integration-guides/backend-token-validation/tanstack-start","siteSpaceId":"sitesp_HGMyw","icon":"umbrella-beach","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"uGwPUZXMtJlS7wBLORJH","title":"Express.js","pathname":"/v8/integration-guides/backend-token-validation/express.js","siteSpaceId":"sitesp_HGMyw","icon":"e","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"OXoKNaWS9xPmnss1Su5Z","title":"Koa","pathname":"/v8/integration-guides/backend-token-validation/koa","siteSpaceId":"sitesp_HGMyw","icon":"leaf","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"zPR95t8w5qJAiCLYoD3X","title":"Fastify","pathname":"/v8/integration-guides/backend-token-validation/fastify","siteSpaceId":"sitesp_HGMyw","icon":"cat-space","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"Wa3hLWnBcDqeohlxH0cf","title":"Hono","pathname":"/v8/integration-guides/backend-token-validation/hono","siteSpaceId":"sitesp_HGMyw","icon":"fire","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"ZIuh00LiTCWxR0bkityR","title":"node:http","pathname":"/v8/integration-guides/backend-token-validation/node-http","siteSpaceId":"sitesp_HGMyw","icon":"node-js","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"8ifc6GIdsYKbMtaQdIw3","title":"Deno.serve","pathname":"/v8/integration-guides/backend-token-validation/deno.serve","siteSpaceId":"sitesp_HGMyw","icon":"dinosaur","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"VhrsZPpokawFDVSdb3mR","title":"Bun.serve","pathname":"/v8/integration-guides/backend-token-validation/bun.serve","siteSpaceId":"sitesp_HGMyw","icon":"onion","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"gun0m7HYjmsrXxRtAx4V","title":"Cloudflare Workers","pathname":"/v8/integration-guides/backend-token-validation/cloudflare-workers","siteSpaceId":"sitesp_HGMyw","icon":"cloudflare","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"TDvOu6phnuo5aOT3gTat","title":"Vercel Edge","pathname":"/v8/integration-guides/backend-token-validation/vercel-edge","siteSpaceId":"sitesp_HGMyw","icon":"triangle","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"M51qRXkODfzWL15hGMu4","title":"WebSocket","pathname":"/v8/integration-guides/backend-token-validation/websocket","siteSpaceId":"sitesp_HGMyw","icon":"right-left-large","description":"Securing a WebSocket connection","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"drVtrUWkA5JynCeKe50g","title":"Mock Modes","pathname":"/v8/integration-guides/backend-token-validation/mock-modes","siteSpaceId":"sitesp_HGMyw","icon":"masks-theater","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Integration Guides"},{"label":"Backend Token Validation","icon":"arrow-right-arrow-left"}]},{"id":"5gpZtUHNuQnwl8hxu3YC","title":"Keycloak","pathname":"/v8/providers-configuration/keycloak","siteSpaceId":"sitesp_HGMyw","icon":"code-simple","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"4lJxIBw85ly46Yw5FMsI","title":"Auth0","pathname":"/v8/providers-configuration/auth0","siteSpaceId":"sitesp_HGMyw","icon":"shield-quartered","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"Bd5Knc63f7JKWSZO9p42","title":"Microsoft Entra ID","pathname":"/v8/providers-configuration/microsoft-entra-id","siteSpaceId":"sitesp_HGMyw","icon":"microsoft","description":"Formerly Azure Active Directory","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"RzVNs4KHTWbpdCOaViUK","title":"Clerk","pathname":"/v8/providers-configuration/clerk","siteSpaceId":"sitesp_HGMyw","icon":"circle","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"WkfVnILqpMQsx4qIJPhd","title":"Google OAuth 2.0","pathname":"/v8/providers-configuration/google-oauth","siteSpaceId":"sitesp_HGMyw","icon":"google","description":"Implement \"Login with Google\"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"pgH35LSpFMSJsCaifWCU","title":"Other OIDC Provider","pathname":"/v8/providers-configuration/other","siteSpaceId":"sitesp_HGMyw","icon":"sliders","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"glciYAdDQPnmc0fwtVhZ","title":"Auto Login","pathname":"/v8/features/auto-login","siteSpaceId":"sitesp_HGMyw","icon":"shield","description":"Enforce authentication everywhere in your app.","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"tpyBmXI4q9q1dCCuf6ZY","title":"Auto Logout","pathname":"/v8/features/auto-logout","siteSpaceId":"sitesp_HGMyw","icon":"timer","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"23aQZwCqT2UW3YgpY1gx","title":"DPoP","pathname":"/v8/features/dpop","siteSpaceId":"sitesp_HGMyw","icon":"receipt","description":"OAuth 2.0 Demonstrating Proof-of-Possession","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"DrwNXR5CtJzJuR4m8RUq","title":"Debug and Error Handling","pathname":"/v8/features/error-management","siteSpaceId":"sitesp_HGMyw","icon":"message-exclamation","description":"Gracefully handle authentication issues","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"3ihTpAXj8fpQE6T3N8Mf","title":"Error Handling - No AutoLogin","pathname":"/v8/features/error-management/error-handling-no-autologin","siteSpaceId":"sitesp_HGMyw","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"features"},{"label":"Debug and Error Handling","icon":"message-exclamation"}]},{"id":"NpMDaypbUoQjAqBEbyY0","title":"Error Handling - With AutoLogin","pathname":"/v8/features/error-management/error-handling-with-autologin","siteSpaceId":"sitesp_HGMyw","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"features"},{"label":"Debug and Error Handling","icon":"message-exclamation"}]},{"id":"hplelJgv3qw1OYSJyUii","title":"Non Blocking Rendering","pathname":"/v8/features/non-blocking-rendering","siteSpaceId":"sitesp_HGMyw","icon":"gauge-max","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"rmKZukO1gbrHASOsjbaY","title":"Talking to multiple APIs (with different access tokens)","pathname":"/v8/features/talking-to-multiple-apis-with-different-access-tokens","siteSpaceId":"sitesp_HGMyw","icon":"arrows-to-circle","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"WBzrPI2PGowF0zoptSk9","title":"Tokens Renewal","pathname":"/v8/features/tokens-renewal","siteSpaceId":"sitesp_HGMyw","icon":"arrows-rotate-reverse","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"xwvm8d1eSV4Mxy2CXUUb","title":"User Account Management","pathname":"/v8/features/user-account-management","siteSpaceId":"sitesp_HGMyw","icon":"file-user","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"CtQbmISXVEyH80C2rMuI","title":"User Session Initialization","pathname":"/v8/features/user-session-initialization","siteSpaceId":"sitesp_HGMyw","icon":"square-caret-up","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"features"}]},{"id":"U5aggGhQecNR7qbmoQsQ","title":"Migrating from Keycloak-js","pathname":"/v8/resources/migrating-from-keycloak-js","siteSpaceId":"sitesp_HGMyw","icon":"arrow-up-to-dotted-line","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"PEVVAcvpgrhNHpuD5ykF","title":"Third‑party cookies and session restoration","pathname":"/v8/resources/third-party-cookies-and-session-restoration","siteSpaceId":"sitesp_HGMyw","icon":"cookie","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"L2FgCwqcTwwPph2YPsgt","title":"CSP Configuration","pathname":"/v8/resources/csp-configuration","siteSpaceId":"sitesp_HGMyw","icon":"user-police","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"1YIPuLGi53e55HXQRyls","title":"Why No Client Secret?","pathname":"/v8/resources/why-no-client-secret","siteSpaceId":"sitesp_HGMyw","icon":"question","description":"Why Doesn't oidc-spa Require a Client Secret?","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"4KH5IJxpPsYtvokAvp9a","title":"Token Exfiltration Defence","pathname":"/v8/resources/token-exfiltration-defence","siteSpaceId":"sitesp_HGMyw","icon":"shield-check","description":"How oidc-spa mitigates the risks of token exposure","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"XXkvNZFbvuiDBJIBN3Ab","title":"JWT Of the Access Token","pathname":"/v8/resources/jwt-of-the-access-token","siteSpaceId":"sitesp_HGMyw","icon":"brackets-curly","description":"And why it's not supposed to be read on the client side.","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"yG1H9oPTd4jZ9IbZJa5Z","title":"Discord Server","pathname":"/v8/resources/discord-server","siteSpaceId":"sitesp_HGMyw","icon":"discord","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"y5StFTljslWbfZEnBSKA","title":"Sponsors","pathname":"/v8/sponsors","siteSpaceId":"sitesp_HGMyw","icon":"star","description":"Backers of the project","breadcrumbs":[{"label":"Documentation"}]},{"id":"vH0xmrPpAUvzdQaRIhYB","title":"Installation","pathname":"/v7","siteSpaceId":"sitesp_vL2ET","icon":"sign-posts-wrench","breadcrumbs":[{"label":"Documentation"}]},{"id":"4DwF1XPwmeeluLK1EN7m","title":"Basic Usage","pathname":"/v7/usage","siteSpaceId":"sitesp_vL2ET","icon":"flag-checkered","description":"Let's get your App authenticated!","breadcrumbs":[{"label":"Documentation"}]},{"id":"9h0o4hUvuUAMeveFCosj","title":"Web API","pathname":"/v7/web-api","siteSpaceId":"sitesp_vL2ET","icon":"plug","breadcrumbs":[{"label":"Documentation"}]},{"id":"glciYAdDQPnmc0fwtVhZ","title":"Auto Login","pathname":"/v7/auto-login","siteSpaceId":"sitesp_vL2ET","icon":"shield","description":"Enforce authentication everywhere in your app.","breadcrumbs":[{"label":"Documentation"}]},{"id":"tpyBmXI4q9q1dCCuf6ZY","title":"Auto Logout","pathname":"/v7/auto-logout","siteSpaceId":"sitesp_vL2ET","icon":"timer","description":"Automatically logging out your user after a set period of inactivity on your app (they dont move the mouse or press any key on the keyboard for a while)","breadcrumbs":[{"label":"Documentation"}]},{"id":"DrwNXR5CtJzJuR4m8RUq","title":"Error Management","pathname":"/v7/error-management","siteSpaceId":"sitesp_vL2ET","icon":"message-exclamation","description":"Gracefully handle authentication issues","breadcrumbs":[{"label":"Documentation"}]},{"id":"4zRWVgOdBlfA66VrLsLH","title":"Mock","pathname":"/v7/mock","siteSpaceId":"sitesp_vL2ET","icon":"masks-theater","breadcrumbs":[{"label":"Documentation"}]},{"id":"xwvm8d1eSV4Mxy2CXUUb","title":"User Account Management","pathname":"/v7/user-account-management","siteSpaceId":"sitesp_vL2ET","icon":"file-user","breadcrumbs":[{"label":"Documentation"}]},{"id":"CtQbmISXVEyH80C2rMuI","title":"User Session Initialization","pathname":"/v7/user-session-initialization","siteSpaceId":"sitesp_vL2ET","icon":"square-caret-up","breadcrumbs":[{"label":"Documentation"}]},{"id":"WBzrPI2PGowF0zoptSk9","title":"Tokens Renewal","pathname":"/v7/tokens-renewal","siteSpaceId":"sitesp_vL2ET","icon":"arrows-rotate-reverse","breadcrumbs":[{"label":"Documentation"}]},{"id":"Gemwcbm0G6uqPI4c1liz","title":"React Router","pathname":"/v7/setup-guides/react-router","siteSpaceId":"sitesp_vL2ET","icon":"route","breadcrumbs":[{"label":"Documentation"},{"label":"Setup Guides"}]},{"id":"OqyN8w0mg3WyMGFwLi6W","title":"TanStack Router","pathname":"/v7/setup-guides/tanstack-router","siteSpaceId":"sitesp_vL2ET","icon":"arrow-progress","description":"Vite + TypeScript + React + Tanstack Router","breadcrumbs":[{"label":"Documentation"},{"label":"Setup Guides"}]},{"id":"yolKsccF0yDQcZTXQnPo","title":"Full-Stack with Node REST API","pathname":"/v7/setup-guides/tanstack-router-+-node-rest-api","siteSpaceId":"sitesp_vL2ET","icon":"arrow-right-arrow-left","description":"A full-stack example covering both the backend and frontend","breadcrumbs":[{"label":"Documentation"},{"label":"Setup Guides"}]},{"id":"5gpZtUHNuQnwl8hxu3YC","title":"Keycloak","pathname":"/v7/providers-configuration/keycloak","siteSpaceId":"sitesp_vL2ET","icon":"code-simple","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"4lJxIBw85ly46Yw5FMsI","title":"Auth0","pathname":"/v7/providers-configuration/auth0","siteSpaceId":"sitesp_vL2ET","icon":"shield-quartered","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"Bd5Knc63f7JKWSZO9p42","title":"Microsoft Entra ID","pathname":"/v7/providers-configuration/microsoft-entra-id","siteSpaceId":"sitesp_vL2ET","icon":"microsoft","description":"Formerly Azure Active Directory","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"RzVNs4KHTWbpdCOaViUK","title":"Clerk","pathname":"/v7/providers-configuration/clerk","siteSpaceId":"sitesp_vL2ET","icon":"circle","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"WkfVnILqpMQsx4qIJPhd","title":"Google OAuth 2.0","pathname":"/v7/providers-configuration/google-oauth","siteSpaceId":"sitesp_vL2ET","icon":"google","description":"Implement \"Login with Google\"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"pgH35LSpFMSJsCaifWCU","title":"Other OIDC Provider","pathname":"/v7/providers-configuration/other","siteSpaceId":"sitesp_vL2ET","icon":"sliders","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"1YIPuLGi53e55HXQRyls","title":"Why No Client Secret?","pathname":"/v7/resources/why-no-client-secret","siteSpaceId":"sitesp_vL2ET","icon":"question","description":"Why Doesn't oidc-spa Require a Client Secret?","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"ualX20ustJvFsKdZDAjW","title":"End of third-party cookies","pathname":"/v7/resources/end-of-third-party-cookies","siteSpaceId":"sitesp_vL2ET","icon":"cookie","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"EAnFnzgWDAWItsbSWD4M","title":"iframe related issues","pathname":"/v7/resources/iframe-related-issues","siteSpaceId":"sitesp_vL2ET","icon":"crop-simple","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"XXkvNZFbvuiDBJIBN3Ab","title":"JWT Of the Access Token","pathname":"/v7/resources/jwt-of-the-access-token","siteSpaceId":"sitesp_vL2ET","icon":"brackets-curly","description":"And why it's not supposed to be read on the client side.","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"yG1H9oPTd4jZ9IbZJa5Z","title":"Discord Server","pathname":"/v7/resources/discord-server","siteSpaceId":"sitesp_vL2ET","icon":"discord","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"RAAp2GHs1CoNBQU54p1Q","title":"User Impersonation","pathname":"/v7/user-impersonation","siteSpaceId":"sitesp_vL2ET","icon":"masks-theater","breadcrumbs":[{"label":"Documentation"}]},{"id":"y5StFTljslWbfZEnBSKA","title":"Sponsors","pathname":"/v7/sponsors","siteSpaceId":"sitesp_vL2ET","icon":"star","description":"Backers of the project","breadcrumbs":[{"label":"Documentation"}]},{"id":"o7mf9sx2j3zFyddFEHST","title":"Why oidcEarlyInit","pathname":"/v7/why-oidcearlyinit","siteSpaceId":"sitesp_vL2ET","icon":"traffic-light","breadcrumbs":[{"label":"Documentation"}]},{"id":"vH0xmrPpAUvzdQaRIhYB","title":"Installation","pathname":"/v6","siteSpaceId":"sitesp_ykkw7","icon":"sign-posts-wrench","description":"","breadcrumbs":[{"label":"Documentation"}]},{"id":"4DwF1XPwmeeluLK1EN7m","title":"Basic Usage","pathname":"/v6/usage","siteSpaceId":"sitesp_ykkw7","icon":"flag-checkered","description":"Let's get your App authenticated!","breadcrumbs":[{"label":"Documentation"}]},{"id":"9h0o4hUvuUAMeveFCosj","title":"Web API","pathname":"/v6/web-api","siteSpaceId":"sitesp_ykkw7","icon":"plug","breadcrumbs":[{"label":"Documentation"}]},{"id":"glciYAdDQPnmc0fwtVhZ","title":"Auto Login","pathname":"/v6/auto-login","siteSpaceId":"sitesp_ykkw7","icon":"shield","description":"Enforce authentication everywhere in your app.","breadcrumbs":[{"label":"Documentation"}]},{"id":"tpyBmXI4q9q1dCCuf6ZY","title":"Auto Logout","pathname":"/v6/auto-logout","siteSpaceId":"sitesp_ykkw7","icon":"timer","description":"Automatically logging out your user after a set period of inactivity on your app (they dont move the mouse or press any key on the keyboard for a while)","breadcrumbs":[{"label":"Documentation"}]},{"id":"DrwNXR5CtJzJuR4m8RUq","title":"Error Management","pathname":"/v6/error-management","siteSpaceId":"sitesp_ykkw7","icon":"message-exclamation","description":"Gracefully handle authentication issues","breadcrumbs":[{"label":"Documentation"}]},{"id":"4zRWVgOdBlfA66VrLsLH","title":"Mock","pathname":"/v6/mock","siteSpaceId":"sitesp_ykkw7","icon":"masks-theater","breadcrumbs":[{"label":"Documentation"}]},{"id":"xwvm8d1eSV4Mxy2CXUUb","title":"User Account Management","pathname":"/v6/user-account-management","siteSpaceId":"sitesp_ykkw7","icon":"file-user","breadcrumbs":[{"label":"Documentation"}]},{"id":"CtQbmISXVEyH80C2rMuI","title":"User Session Initialization","pathname":"/v6/user-session-initialization","siteSpaceId":"sitesp_ykkw7","icon":"square-caret-up","breadcrumbs":[{"label":"Documentation"}]},{"id":"WBzrPI2PGowF0zoptSk9","title":"Tokens Renewal","pathname":"/v6/tokens-renewal","siteSpaceId":"sitesp_ykkw7","icon":"arrows-rotate-reverse","breadcrumbs":[{"label":"Documentation"}]},{"id":"Gemwcbm0G6uqPI4c1liz","title":"React Router","pathname":"/v6/setup-guides/react-router","siteSpaceId":"sitesp_ykkw7","icon":"route","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Setup Guides"}]},{"id":"OqyN8w0mg3WyMGFwLi6W","title":"TanStack Router","pathname":"/v6/setup-guides/tanstack-router","siteSpaceId":"sitesp_ykkw7","icon":"arrow-progress","description":"Vite + TypeScript + React + Tanstack Router","breadcrumbs":[{"label":"Documentation"},{"label":"Setup Guides"}]},{"id":"yolKsccF0yDQcZTXQnPo","title":"Full-Stack with Node REST API","pathname":"/v6/setup-guides/tanstack-router-+-node-rest-api","siteSpaceId":"sitesp_ykkw7","icon":"arrow-right-arrow-left","description":"A full-stack example covering both the backend and frontend","breadcrumbs":[{"label":"Documentation"},{"label":"Setup Guides"}]},{"id":"5gpZtUHNuQnwl8hxu3YC","title":"Keycloak","pathname":"/v6/providers-configuration/keycloak","siteSpaceId":"sitesp_ykkw7","icon":"code-simple","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"4lJxIBw85ly46Yw5FMsI","title":"Auth0","pathname":"/v6/providers-configuration/auth0","siteSpaceId":"sitesp_ykkw7","icon":"shield-quartered","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"Bd5Knc63f7JKWSZO9p42","title":"Microsoft Entra ID","pathname":"/v6/providers-configuration/microsoft-entra-id","siteSpaceId":"sitesp_ykkw7","icon":"microsoft","description":"Formerly Azure Active Directory","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"WkfVnILqpMQsx4qIJPhd","title":"Google OAuth 2.0","pathname":"/v6/providers-configuration/google-oauth","siteSpaceId":"sitesp_ykkw7","icon":"google","description":"Implement \"Login with Google\"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"pgH35LSpFMSJsCaifWCU","title":"Other OIDC Provider","pathname":"/v6/providers-configuration/other","siteSpaceId":"sitesp_ykkw7","icon":"sliders","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Providers Configuration"}]},{"id":"1YIPuLGi53e55HXQRyls","title":"Why No Client Secret?","pathname":"/v6/resources/why-no-client-secret","siteSpaceId":"sitesp_ykkw7","icon":"question","description":"Why Doesn't oidc-spa Require a Client Secret?","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"ualX20ustJvFsKdZDAjW","title":"End of third-party cookies","pathname":"/v6/resources/end-of-third-party-cookies","siteSpaceId":"sitesp_ykkw7","icon":"cookie","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"EAnFnzgWDAWItsbSWD4M","title":"iframe related issues","pathname":"/v6/resources/iframe-related-issues","siteSpaceId":"sitesp_ykkw7","icon":"crop-simple","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"XXkvNZFbvuiDBJIBN3Ab","title":"JWT Of the Access Token","pathname":"/v6/resources/jwt-of-the-access-token","siteSpaceId":"sitesp_ykkw7","icon":"brackets-curly","description":"And why it's not supposed to be read on the client side.","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"yG1H9oPTd4jZ9IbZJa5Z","title":"Discord Server","pathname":"/v6/resources/discord-server","siteSpaceId":"sitesp_ykkw7","icon":"discord","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"RAAp2GHs1CoNBQU54p1Q","title":"User Impersonation","pathname":"/v6/user-impersonation","siteSpaceId":"sitesp_ykkw7","icon":"masks-theater","breadcrumbs":[{"label":"Documentation"}]},{"id":"y5StFTljslWbfZEnBSKA","title":"Sponsors","pathname":"/v6/sponsors","siteSpaceId":"sitesp_ykkw7","icon":"star","description":"Backers of the project","breadcrumbs":[{"label":"Documentation"}]},{"id":"o7mf9sx2j3zFyddFEHST","title":"Why oidcEarlyInit","pathname":"/v6/why-oidcearlyinit","siteSpaceId":"sitesp_ykkw7","icon":"traffic-light","description":"","breadcrumbs":[{"label":"Documentation"}]},{"id":"vH0xmrPpAUvzdQaRIhYB","title":"Installation","pathname":"/v5","siteSpaceId":"sitesp_SPvTf","emoji":"1f529","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"4DwF1XPwmeeluLK1EN7m","title":"Basic Usage","pathname":"/v5/documentation/usage","siteSpaceId":"sitesp_SPvTf","emoji":"1f468-1f527","description":"Let's get your App authenticated!","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"9h0o4hUvuUAMeveFCosj","title":"Web API","pathname":"/v5/documentation/web-api","siteSpaceId":"sitesp_SPvTf","emoji":"1f50c","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"tpyBmXI4q9q1dCCuf6ZY","title":"Auto Logout","pathname":"/v5/documentation/auto-logout","siteSpaceId":"sitesp_SPvTf","emoji":"23f2","description":"Automatically logging out your user after a set period of inactivity on your app (they dont move the mouse or press any key on the keyboard for a while)","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"DrwNXR5CtJzJuR4m8RUq","title":"Error Management","pathname":"/v5/documentation/error-management","siteSpaceId":"sitesp_SPvTf","emoji":"2757","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"4zRWVgOdBlfA66VrLsLH","title":"Mock","pathname":"/v5/documentation/mock","siteSpaceId":"sitesp_SPvTf","emoji":"1f3ad","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"WBzrPI2PGowF0zoptSk9","title":"Tokens Renewal","pathname":"/v5/documentation/tokens-renewal","siteSpaceId":"sitesp_SPvTf","emoji":"1f501","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"glciYAdDQPnmc0fwtVhZ","title":"Globally Enforce Authentication","pathname":"/v5/documentation/globally-enforce-authentication","siteSpaceId":"sitesp_SPvTf","emoji":"1f6e1","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"xwvm8d1eSV4Mxy2CXUUb","title":"User Account Management","pathname":"/v5/documentation/user-account-management","siteSpaceId":"sitesp_SPvTf","emoji":"1f510","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"CtQbmISXVEyH80C2rMuI","title":"Doing Something Only When a New Session is Created","pathname":"/v5/documentation/doing-something-only-when-a-new-session-is-created","siteSpaceId":"sitesp_SPvTf","emoji":"1f504","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"DeYTLbHjwp8twHXikEz3","title":"User impersonation","pathname":"/v5/documentation/user-impersonation","siteSpaceId":"sitesp_SPvTf","emoji":"1f468-1f527","description":"Enable the admin of your application to login as a given user.","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"re34O16v1PlWtSJGBYOF","title":"Disabeling token persistance","pathname":"/v5/documentation/disabeling-token-persistance","siteSpaceId":"sitesp_SPvTf","emoji":"1f46e","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"OqyN8w0mg3WyMGFwLi6W","title":"TanStack Router","pathname":"/v5/example-setups/tanstack-router","siteSpaceId":"sitesp_SPvTf","emoji":"1f6e3","description":"Vite + TypeScript + React + Tanstack Router","breadcrumbs":[{"label":"Documentation"},{"label":"Example setups"}]},{"id":"Gemwcbm0G6uqPI4c1liz","title":"React Router","pathname":"/v5/example-setups/react-router","siteSpaceId":"sitesp_SPvTf","emoji":"1f6e4","breadcrumbs":[{"label":"Documentation"},{"label":"Example setups"}]},{"id":"5gpZtUHNuQnwl8hxu3YC","title":"Keycloak Configuration Guide","pathname":"/v5/resources/usage-with-keycloak","siteSpaceId":"sitesp_SPvTf","emoji":"1f511","description":"Let's spin up a Keycloak server and configure it for your webapp!","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"ualX20ustJvFsKdZDAjW","title":"End of third-party cookies","pathname":"/v5/resources/end-of-third-party-cookies","siteSpaceId":"sitesp_SPvTf","emoji":"1f36a","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"XXkvNZFbvuiDBJIBN3Ab","title":"JWT Of the Access Token","pathname":"/v5/resources/jwt-of-the-access-token","siteSpaceId":"sitesp_SPvTf","emoji":"1f5dd","description":"And why it's not supposed to be read on the client side.","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"yG1H9oPTd4jZ9IbZJa5Z","title":"Discord Server","pathname":"/v5/resources/discord-server","siteSpaceId":"sitesp_SPvTf","emoji":"1f4ac","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"Ue99V83I8kTaG0UKYedT","title":"Migration Guides","pathname":"/v5/resources/migration-guides","siteSpaceId":"sitesp_SPvTf","emoji":"2b06","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"eceDzjhAOjCQwxRf6TjA","title":"v4 -> v5","pathname":"/v5/resources/migration-guides/v4-greater-than-v5","siteSpaceId":"sitesp_SPvTf","emoji":"2b06","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"},{"label":"Migration Guides","emoji":"2b06"}]},{"id":"y5StFTljslWbfZEnBSKA","title":"Sponsors","pathname":"/v5/sponsors","siteSpaceId":"sitesp_SPvTf","emoji":"2b50","description":"Backers of the project","breadcrumbs":[{"label":"Documentation"}]},{"id":"7b8tZHYVhgWJgxTa7zC3","title":"Installation","pathname":"/v4","siteSpaceId":"sitesp_4nlAb","emoji":"1f529","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"4DwF1XPwmeeluLK1EN7m","title":"Basic Usage","pathname":"/v4/documentation/usage","siteSpaceId":"sitesp_4nlAb","emoji":"1f468-1f527","description":"Let's get your App authenticated!","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"9h0o4hUvuUAMeveFCosj","title":"Web API","pathname":"/v4/documentation/web-api","siteSpaceId":"sitesp_4nlAb","emoji":"1f50c","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"tpyBmXI4q9q1dCCuf6ZY","title":"Auto Logout","pathname":"/v4/documentation/auto-logout","siteSpaceId":"sitesp_4nlAb","emoji":"23f2","description":"Automatically logging out your user after a set period of inactivity on your app (they dont move the mouse or press any key on the keyboard for a while)","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"DrwNXR5CtJzJuR4m8RUq","title":"Error Management","pathname":"/v4/documentation/error-management","siteSpaceId":"sitesp_4nlAb","emoji":"2757","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"4zRWVgOdBlfA66VrLsLH","title":"Mock","pathname":"/v4/documentation/mock","siteSpaceId":"sitesp_4nlAb","emoji":"1f3ad","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"WBzrPI2PGowF0zoptSk9","title":"Tokens Renewal","pathname":"/v4/documentation/tokens-renewal","siteSpaceId":"sitesp_4nlAb","emoji":"1f501","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"glciYAdDQPnmc0fwtVhZ","title":"Globally Enforce Authentication","pathname":"/v4/documentation/globally-enforce-authentication","siteSpaceId":"sitesp_4nlAb","emoji":"1f6e1","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"xwvm8d1eSV4Mxy2CXUUb","title":"User Account Management","pathname":"/v4/documentation/user-account-management","siteSpaceId":"sitesp_4nlAb","emoji":"1f510","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"CtQbmISXVEyH80C2rMuI","title":"Doing Something Only When a New Session is Created","pathname":"/v4/documentation/doing-something-only-when-a-new-session-is-created","siteSpaceId":"sitesp_4nlAb","emoji":"1f504","breadcrumbs":[{"label":"Documentation"},{"label":"Documentation"}]},{"id":"OqyN8w0mg3WyMGFwLi6W","title":"TanStack Router","pathname":"/v4/example-setups/tanstack-router","siteSpaceId":"sitesp_4nlAb","emoji":"1f6e3","description":"Vite + TypeScript + React + Tanstack Router","breadcrumbs":[{"label":"Documentation"},{"label":"Example setups"}]},{"id":"Gemwcbm0G6uqPI4c1liz","title":"React Router","pathname":"/v4/example-setups/react-router","siteSpaceId":"sitesp_4nlAb","emoji":"1f6e4","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Example setups"}]},{"id":"5gpZtUHNuQnwl8hxu3YC","title":"Keycloak Configuration Guide","pathname":"/v4/resources/usage-with-keycloak","siteSpaceId":"sitesp_4nlAb","emoji":"1f511","description":"Let's spin up a Keycloak server and configure it for your webapp!","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"wdmun2PncCCG2rL1SrPL","title":"Accessing Keycloak Groups","pathname":"/v4/resources/accessing-keycloak-groups","siteSpaceId":"sitesp_4nlAb","emoji":"1f465","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"ualX20ustJvFsKdZDAjW","title":"End of third-party cookies","pathname":"/v4/resources/end-of-third-party-cookies","siteSpaceId":"sitesp_4nlAb","emoji":"1f36a","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"XXkvNZFbvuiDBJIBN3Ab","title":"JWT Of the Access Token","pathname":"/v4/resources/jwt-of-the-access-token","siteSpaceId":"sitesp_4nlAb","emoji":"1f5dd","description":"And why it's not supposed to be read on the client side.","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"yG1H9oPTd4jZ9IbZJa5Z","title":"Discord Server","pathname":"/v4/resources/discord-server","siteSpaceId":"sitesp_4nlAb","emoji":"1f4ac","breadcrumbs":[{"label":"Documentation"},{"label":"Resources"}]},{"id":"y5StFTljslWbfZEnBSKA","title":"Sponsors","pathname":"/v4/sponsors","siteSpaceId":"sitesp_4nlAb","emoji":"2b50","description":"Friend of the project","breadcrumbs":[{"label":"Documentation"}]},{"id":"QMWiXJYYAlsGZmLj8dlL","title":"Overview","pathname":"/v3","siteSpaceId":"sitesp_xsuBp","emoji":"2b50","description":"A solution to implement user authentication in your webapplication","breadcrumbs":[{"label":"Documentation"},{"label":"Getting started"}]},{"id":"7b8tZHYVhgWJgxTa7zC3","title":"Installation","pathname":"/v3/getting-started/installation","siteSpaceId":"sitesp_xsuBp","emoji":"1f529","description":"","breadcrumbs":[{"label":"Documentation"},{"label":"Getting started"}]},{"id":"4DwF1XPwmeeluLK1EN7m","title":"Usage","pathname":"/v3/getting-started/usage","siteSpaceId":"sitesp_xsuBp","emoji":"1f468-1f527","description":"Let's get your App authenticated!","breadcrumbs":[{"label":"Documentation"},{"label":"Getting started"}]},{"id":"5gpZtUHNuQnwl8hxu3YC","title":"Usage with Keycloak","pathname":"/v3/getting-started/usage-with-keycloak","siteSpaceId":"sitesp_xsuBp","emoji":"1f511","description":"Let's spin up a Keycloak server and configure it for your webapp!","breadcrumbs":[{"label":"Documentation"},{"label":"Getting started"}]},{"id":"Gemwcbm0G6uqPI4c1liz","title":"React Router","pathname":"/v3/example-setups/react-router","siteSpaceId":"sitesp_xsuBp","breadcrumbs":[{"label":"Documentation"},{"label":"Example setups"}]},{"id":"OqyN8w0mg3WyMGFwLi6W","title":"Tanstack Router","pathname":"/v3/example-setups/tanstack-router","siteSpaceId":"sitesp_xsuBp","breadcrumbs":[{"label":"Documentation"},{"label":"Example setups"}]},{"id":"uPO0ozAygEU7HjU58j5S","title":"Vanilla API","pathname":"/v3/api-reference/vanilla-api","siteSpaceId":"sitesp_xsuBp","emoji":"1f366","breadcrumbs":[{"label":"Documentation"},{"label":"API Reference"}]},{"id":"V5EruBqJbhAQYyxVMsMm","title":"createOidc()","pathname":"/v3/api-reference/vanilla-api/createoidc","siteSpaceId":"sitesp_xsuBp","description":"The createOidc() function is a function that assists in creating an OpenID Connect (OIDC) client, which can be utilized in your application for authentication purposes.","breadcrumbs":[{"label":"Documentation"},{"label":"API Reference"},{"label":"Vanilla API","emoji":"1f366"}]},{"id":"yuBSbT3myL99csaelCRY","title":"React API","pathname":"/v3/api-reference/react-api","siteSpaceId":"sitesp_xsuBp","emoji":"269b","breadcrumbs":[{"label":"Documentation"},{"label":"API Reference"}]},{"id":"Ef832yewmP0YrKBqWztg","title":"createOidcProvider","pathname":"/v3/api-reference/react-api/createoidcprovider","siteSpaceId":"sitesp_xsuBp","breadcrumbs":[{"label":"Documentation"},{"label":"API Reference"},{"label":"React API","emoji":"269b"}]},{"id":"WevyUqhjxh4xtpmTXa94","title":"createUseOidc","pathname":"/v3/api-reference/react-api/createuseoidc","siteSpaceId":"sitesp_xsuBp","breadcrumbs":[{"label":"Documentation"},{"label":"API Reference"},{"label":"React API","emoji":"269b"}]},{"id":"o5Ulp73Q1DbXrQdee9Rm","title":"v9 -> v10","pathname":"/release-notes","siteSpaceId":"sitesp_kh59w","icon":"up","breadcrumbs":[{"label":"Release Notes & Upgrade Instructions"}]},{"id":"MZARo558a2IHirp1B9TD","title":"v8 -> v10","pathname":"/release-notes/v8-greater-than-v10","siteSpaceId":"sitesp_kh59w","icon":"up","breadcrumbs":[{"label":"Release Notes & Upgrade Instructions"}]},{"id":"Cl3Qv8TwzoWsP5PFu8lK","title":"v8 -> v9","pathname":"/release-notes/v8-greater-than-v9","siteSpaceId":"sitesp_kh59w","icon":"up","breadcrumbs":[{"label":"Release Notes & Upgrade Instructions"}]},{"id":"XMO5jFE66n2btitkFdoR","title":"v7 -> v8","pathname":"/release-notes/v7-greater-than-v8","siteSpaceId":"sitesp_kh59w","icon":"up","breadcrumbs":[{"label":"Release Notes & Upgrade Instructions"}]},{"id":"SGEeO1R21z8Z5WXrYFiz","title":"v6 -> v7","pathname":"/release-notes/readme","siteSpaceId":"sitesp_kh59w","icon":"up","description":"","breadcrumbs":[{"label":"Release Notes & Upgrade Instructions"}]},{"id":"D4joaRZSf6VdsCmlQLya","title":"v5 -> v6","pathname":"/release-notes/readme-1","siteSpaceId":"sitesp_kh59w","icon":"up","description":"","breadcrumbs":[{"label":"Release Notes & Upgrade Instructions"}]},{"id":"eceDzjhAOjCQwxRf6TjA","title":"v4 -> v5","pathname":"/release-notes/v4-greater-than-v5","siteSpaceId":"sitesp_kh59w","icon":"up","breadcrumbs":[{"label":"Release Notes & Upgrade Instructions"}]}]}