[{"data":1,"prerenderedAt":410},["ShallowReactive",2],{"navigation":3,"\u002Fmodules\u002Fcookie-auth":94,"\u002Fmodules\u002Fcookie-auth-surround":405},[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":64,"body":96,"description":398,"extension":399,"links":400,"meta":401,"navigation":402,"path":65,"seo":403,"stem":66,"__hash__":404},"docs\u002F3.modules\u002F2.cookie-auth.md",{"type":97,"value":98,"toc":389},"minimark",[99,107,112,167,171,214,218,224,291,295,298,312,316,355,359,370,374,385],[100,101,102,103,106],"p",{},"Cookie sign-in for first-party SPAs. Pair with ",[104,105,59],"a",{"href":60},".",[108,109,111],"h2",{"id":110},"di","DI",[113,114,119],"pre",{"className":115,"code":116,"language":117,"meta":118,"style":118},"language-cs shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","builder.Services.AddAntiforgery();\nbuilder.Services.AddCookieAuthEndpoints(); \u002F\u002F ReAuth schemes + rate limits\n","cs","",[120,121,122,146],"code",{"__ignoreMap":118},[123,124,127,131,134,137,139,143],"span",{"class":125,"line":126},"line",1,[123,128,130],{"class":129},"sTEyZ","builder",[123,132,106],{"class":133},"sMK4o",[123,135,136],{"class":129},"Services",[123,138,106],{"class":133},[123,140,142],{"class":141},"s2Zo4","AddAntiforgery",[123,144,145],{"class":133},"();\n",[123,147,149,151,153,155,157,160,163],{"class":125,"line":148},2,[123,150,130],{"class":129},[123,152,106],{"class":133},[123,154,136],{"class":129},[123,156,106],{"class":133},[123,158,159],{"class":141},"AddCookieAuthEndpoints",[123,161,162],{"class":133},"();",[123,164,166],{"class":165},"sHwdD"," \u002F\u002F ReAuth schemes + rate limits\n",[108,168,170],{"id":169},"map","Map",[113,172,174],{"className":115,"code":173,"language":117,"meta":118,"style":118},"app.MapGroup(\"\u002Fidentity\").MapCookieAuthEndpoints\u003CAppUser>();\n",[120,175,176],{"__ignoreMap":118},[123,177,178,181,183,186,189,192,196,198,201,204,207,211],{"class":125,"line":126},[123,179,180],{"class":129},"app",[123,182,106],{"class":133},[123,184,185],{"class":141},"MapGroup",[123,187,188],{"class":133},"(",[123,190,191],{"class":133},"\"",[123,193,195],{"class":194},"sfazB","\u002Fidentity",[123,197,191],{"class":133},[123,199,200],{"class":133},").",[123,202,203],{"class":141},"MapCookieAuthEndpoints",[123,205,206],{"class":133},"\u003C",[123,208,210],{"class":209},"sBMFI","AppUser",[123,212,213],{"class":133},">();\n",[108,215,217],{"id":216},"routes","Routes",[100,219,220,221,223],{},"Relative to the group prefix (facade default ",[120,222,195],{},"):",[225,226,227,243],"table",{},[228,229,230],"thead",{},[231,232,233,237,240],"tr",{},[234,235,236],"th",{},"Method",[234,238,239],{},"Path",[234,241,242],{},"Notes",[244,245,246,262,276],"tbody",{},[231,247,248,254,259],{},[249,250,251],"td",{},[120,252,253],{},"POST",[249,255,256],{},[120,257,258],{},"\u002Flogin",[249,260,261],{},"Application cookie; lockout on failure; rate-limited",[231,263,264,268,273],{},[249,265,266],{},[120,267,253],{},[249,269,270],{},[120,271,272],{},"\u002Flogout",[249,274,275],{},"Auth + CSRF",[231,277,278,283,288],{},[249,279,280],{},[120,281,282],{},"GET",[249,284,285],{},[120,286,287],{},"\u002FcsrfToken",[249,289,290],{},"Antiforgery token for unsafe methods",[108,292,294],{"id":293},"login-body","Login body",[100,296,297],{},"Uses Identity login fields, including optional:",[299,300,301,307],"ul",{},[302,303,304],"li",{},[120,305,306],{},"twoFactorCode",[302,308,309],{},[120,310,311],{},"twoFactorRecoveryCode",[108,313,315],{"id":314},"spa-client-notes","SPA client notes",[317,318,319,329,335],"ol",{},[302,320,321,322,325,326,200],{},"Send cookies: ",[120,323,324],{},"credentials: \"include\""," (or Axios ",[120,327,328],{},"withCredentials: true",[302,330,331,334],{},[120,332,333],{},"GET \u002Fidentity\u002FcsrfToken"," (or your prefix).",[302,336,337,338,340,341,340,344,340,347,350,351,354],{},"On ",[120,339,253],{}," \u002F ",[120,342,343],{},"PUT",[120,345,346],{},"PATCH",[120,348,349],{},"DELETE",", send header ",[120,352,353],{},"RequestVerificationToken"," with the token value.",[108,356,358],{"id":357},"gotchas","Gotchas",[299,360,361,364,367],{},[302,362,363],{},"Pipeline must include authentication, authorization, rate limiting, and antiforgery.",[302,365,366],{},"Do not map cookie and bearer login on the same path without separate groups — pick one sign-in stack per prefix.",[302,368,369],{},"CORS must allow credentials if the SPA origin differs from the API.",[108,371,373],{"id":372},"related","Related",[299,375,376,380],{},[302,377,378],{},[104,379,59],{"href":60},[302,381,382],{},[104,383,384],{"href":48},"Composable recipes",[386,387,388],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":118,"searchDepth":126,"depth":148,"links":390},[391,392,393,394,395,396,397],{"id":110,"depth":148,"text":111},{"id":169,"depth":148,"text":170},{"id":216,"depth":148,"text":217},{"id":293,"depth":148,"text":294},{"id":314,"depth":148,"text":315},{"id":357,"depth":148,"text":358},{"id":372,"depth":148,"text":373},"Identity cookie login, logout, and CSRF token endpoints for SPA hosts.","md",null,{},{"icon":67},{"title":64,"description":398},"FzS-8yk5lJiJdZzvRVuvQkoMtkl1kLXtAxe4vtmMoWI",[406,408],{"title":59,"path":60,"stem":61,"description":407,"icon":62,"children":-1},"Account lifecycle endpoints — register, confirm, forgot\u002Freset password, manage info and 2FA.",{"title":69,"path":70,"stem":71,"description":409,"icon":72,"children":-1},"Identity bearer token login, refresh, and logout endpoints.",1785399440325]