[{"data":1,"prerenderedAt":233},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started\u002Fproduction":94,"\u002Fgetting-started\u002Fproduction-surround":228},[4,33,52],{"title":5,"path":6,"stem":7,"children":8,"icon":32},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17,22,27],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-play",{"title":23,"path":24,"stem":25,"icon":26},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F4.configuration","i-lucide-settings",{"title":28,"path":29,"stem":30,"icon":31},"Production","\u002Fgetting-started\u002Fproduction","1.getting-started\u002F5.production","i-lucide-shield-check","i-lucide-rocket",{"title":34,"path":35,"stem":36,"children":37,"icon":51},"Composable Endpoints","\u002Fcomposables","2.composables\u002F1.index",[38,41,46],{"title":39,"path":35,"stem":36,"icon":40},"Overview","i-lucide-layout-grid",{"title":42,"path":43,"stem":44,"icon":45},"Requirements","\u002Fcomposables\u002Frequirements","2.composables\u002F2.requirements","i-lucide-list-checks",{"title":47,"path":48,"stem":49,"icon":50},"Recipes","\u002Fcomposables\u002Frecipes","2.composables\u002F3.recipes","i-lucide-book-marked","i-lucide-blocks",{"title":53,"icon":54,"path":55,"stem":56,"children":57,"page":93},"Modules","i-lucide-package","\u002Fmodules","3.modules",[58,63,68,73,78,83,88],{"title":59,"path":60,"stem":61,"icon":62},"Identity management","\u002Fmodules\u002Fidentity-management","3.modules\u002F1.identity-management","i-lucide-user-cog",{"title":64,"path":65,"stem":66,"icon":67},"Cookie auth","\u002Fmodules\u002Fcookie-auth","3.modules\u002F2.cookie-auth","i-lucide-cookie",{"title":69,"path":70,"stem":71,"icon":72},"Bearer auth","\u002Fmodules\u002Fbearer-auth","3.modules\u002F3.bearer-auth","i-lucide-key",{"title":74,"path":75,"stem":76,"icon":77},"JWT","\u002Fmodules\u002Fjwt","3.modules\u002F4.jwt","i-lucide-fingerprint",{"title":79,"path":80,"stem":81,"icon":82},"Passkeys","\u002Fmodules\u002Fpasskeys","3.modules\u002F5.passkeys","i-lucide-scan-face",{"title":84,"path":85,"stem":86,"icon":87},"ReAuth","\u002Fmodules\u002Freauth","3.modules\u002F6.reauth","i-lucide-shield-alert",{"title":89,"path":90,"stem":91,"icon":92},"External OAuth","\u002Fmodules\u002Fexternal-oauth","3.modules\u002F7.external-oauth","i-lucide-log-in",false,{"id":95,"title":28,"body":96,"description":221,"extension":222,"links":223,"meta":224,"navigation":225,"path":29,"seo":226,"stem":30,"__hash__":227},"docs\u002F1.getting-started\u002F5.production.md",{"type":97,"value":98,"toc":213},"minimark",[99,103,108,185,189,192,196],[100,101,102],"p",{},"Before deploying, verify the following.",[104,105,107],"h2",{"id":106},"checklist","Checklist",[109,110,111,119,133,142,176],"ul",{},[112,113,114,115],"li",{},"Use ",[116,117,118],"strong",{},"HTTPS",[112,120,121,122,128,129,132],{},"Register a real ",[116,123,124],{},[125,126,127],"code",{},"IEmailSender\u003CTUser>"," — Identity's no-op sender is rejected in Production when ",[125,130,131],{},"RequireEmailSenderInProduction"," is true (default)",[112,134,135,136,141],{},"Set ",[116,137,138],{},[125,139,140],{},"Passkeys.ServerDomain"," when passkeys are enabled (default)",[112,143,144,145],{},"For JWT:\n",[109,146,147,159,169],{},[112,148,149,150,155,156],{},"Call ",[116,151,152],{},[125,153,154],{},"modelBuilder.UseRefreshToken()"," on your ",[125,157,158],{},"DbContext",[112,160,161,162,165,166],{},"Use a non-default ",[116,163,164],{},"issuer"," and ",[116,167,168],{},"audience",[112,170,171,172,175],{},"Use a symmetric key of at least ",[116,173,174],{},"256 bits"," (32 UTF-8 bytes), or an asymmetric key",[112,177,178,179,184],{},"Recreate the ",[116,180,181],{},[125,182,183],{},"AuthEndpointsRefreshTokens"," table if upgrading from plaintext refresh-token storage (tokens are stored hashed with family reuse detection)",[104,186,188],{"id":187},"what-the-validators-enforce","What the validators enforce",[100,190,191],{},"The facade options validator checks path formats, Production passkey domain, and email sender registration. JWT options validation rejects insecure Production defaults for issuer, audience, and signing material.",[104,193,195],{"id":194},"related","Related",[109,197,198,203,208],{},[112,199,200],{},[201,202,23],"a",{"href":24},[112,204,205],{},[201,206,207],{"href":75},"JWT module",[112,209,210],{},[201,211,212],{"href":80},"Passkeys module",{"title":214,"searchDepth":215,"depth":216,"links":217},"",1,2,[218,219,220],{"id":106,"depth":216,"text":107},{"id":187,"depth":216,"text":188},{"id":194,"depth":216,"text":195},"Checklist for running AuthEndpoints safely in Production.","md",null,{},{"icon":31},{"title":28,"description":221},"DGkfBuaBzjs6tekGQtXzIGxtnVvWg958S10OZS7RVOg",[229,231],{"title":23,"path":24,"stem":25,"description":230,"icon":26,"children":-1},"Reference for AuthEndpointsOptions and nested passkey\u002FJWT settings.",{"title":39,"path":35,"stem":36,"description":232,"icon":40,"children":-1},"Compose Identity management, sign-in stacks, and passkeys on the prefixes your host needs.",1785399440325]