[{"data":1,"prerenderedAt":700},["ShallowReactive",2],{"navigation":3,"index":203},[4,33,96,114,177],{"title":5,"path":6,"stem":7,"children":8,"icon":32},"Get 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},"Install AuthEndpoints","\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},"Choose a sign-in stack","\u002Fgetting-started\u002Fchoose-a-sign-in-stack","1.getting-started\u002F4.choose-a-sign-in-stack","i-lucide-signpost",{"title":28,"path":29,"stem":30,"icon":31},"Use the AuthEndpoints skill with coding agents","\u002Fgetting-started\u002Fai-agents","1.getting-started\u002F5.ai-agents","i-lucide-bot","i-lucide-rocket",{"title":34,"path":35,"stem":36,"children":37,"icon":95},"Guides","\u002Fguides","2.guides\u002F01.index",[38,40,45,50,55,60,65,70,75,80,85,90],{"title":34,"path":35,"stem":36,"icon":39},"i-lucide-list-checks",{"title":41,"path":42,"stem":43,"icon":44},"Register users","\u002Fguides\u002Fregistration","2.guides\u002F02.registration","i-lucide-user-plus",{"title":46,"path":47,"stem":48,"icon":49},"Sign users in","\u002Fguides\u002Fsign-in","2.guides\u002F03.sign-in","i-lucide-log-in",{"title":51,"path":52,"stem":53,"icon":54},"Sign users out","\u002Fguides\u002Fsign-out","2.guides\u002F04.sign-out","i-lucide-log-out",{"title":56,"path":57,"stem":58,"icon":59},"Turn on two-factor authentication","\u002Fguides\u002Ftwo-factor","2.guides\u002F05.two-factor","i-lucide-smartphone",{"title":61,"path":62,"stem":63,"icon":64},"Reset a forgotten password","\u002Fguides\u002Freset-password","2.guides\u002F06.reset-password","i-lucide-key-round",{"title":66,"path":67,"stem":68,"icon":69},"Change a user's email or password","\u002Fguides\u002Fmanage-account","2.guides\u002F07.manage-account","i-lucide-user-cog",{"title":71,"path":72,"stem":73,"icon":74},"Add, rename, and remove passkeys","\u002Fguides\u002Fmanage-passkeys","2.guides\u002F08.manage-passkeys","i-lucide-scan-face",{"title":76,"path":77,"stem":78,"icon":79},"Link and unlink GitHub or Google accounts","\u002Fguides\u002Flink-external-accounts","2.guides\u002F09.link-external-accounts","i-lucide-link",{"title":81,"path":82,"stem":83,"icon":84},"Require step-up before sensitive actions","\u002Fguides\u002Fstep-up","2.guides\u002F10.step-up","i-lucide-shield-check",{"title":86,"path":87,"stem":88,"icon":89},"Call the API from a browser","\u002Fguides\u002Fbrowser-clients","2.guides\u002F11.browser-clients","i-lucide-globe",{"title":91,"path":92,"stem":93,"icon":94},"Prepare for production","\u002Fguides\u002Fproduction","2.guides\u002F12.production","i-lucide-factory","i-lucide-waypoints",{"title":97,"path":98,"stem":99,"children":100,"icon":113},"Composable endpoints","\u002Fcomposables","3.composables\u002F1.index",[101,104,108],{"title":102,"path":98,"stem":99,"icon":103},"How composition works","i-lucide-layout-grid",{"title":105,"path":106,"stem":107,"icon":39},"Composition requirements","\u002Fcomposables\u002Frequirements","3.composables\u002F2.requirements",{"title":109,"path":110,"stem":111,"icon":112},"Compose a custom auth stack","\u002Fcomposables\u002Frecipes","3.composables\u002F3.recipes","i-lucide-book-marked","i-lucide-blocks",{"title":115,"icon":116,"path":117,"stem":118,"children":119,"page":176},"Reference","i-lucide-book-open","\u002Fmodules","4.modules",[120,125,129,134,139,144,148,153,157,162,166,171],{"title":121,"path":122,"stem":123,"icon":124},"Endpoint reference","\u002Fmodules\u002Fendpoints","4.modules\u002F01.endpoints","i-lucide-route",{"title":126,"path":127,"stem":128,"icon":69},"Identity management module","\u002Fmodules\u002Fidentity-management","4.modules\u002F02.identity-management",{"title":130,"path":131,"stem":132,"icon":133},"Cookie sign-in module","\u002Fmodules\u002Fcookie-auth","4.modules\u002F03.cookie-auth","i-lucide-cookie",{"title":135,"path":136,"stem":137,"icon":138},"Identity bearer sign-in module","\u002Fmodules\u002Fbearer-auth","4.modules\u002F04.bearer-auth","i-lucide-key",{"title":140,"path":141,"stem":142,"icon":143},"JWT module","\u002Fmodules\u002Fjwt","4.modules\u002F05.jwt","i-lucide-fingerprint",{"title":145,"path":146,"stem":147,"icon":74},"Passkeys module","\u002Fmodules\u002Fpasskeys","4.modules\u002F06.passkeys",{"title":149,"path":150,"stem":151,"icon":152},"ReAuth module","\u002Fmodules\u002Freauth","4.modules\u002F07.reauth","i-lucide-shield-alert",{"title":154,"path":155,"stem":156,"icon":49},"External OAuth packages","\u002Fmodules\u002Fexternal-oauth","4.modules\u002F08.external-oauth",{"title":158,"path":159,"stem":160,"icon":161},"Configuration options","\u002Fmodules\u002Fconfiguration","4.modules\u002F09.configuration","i-lucide-settings",{"title":163,"path":164,"stem":165,"icon":84},"Antiforgery (CSRF) rules","\u002Fmodules\u002Fcsrf","4.modules\u002F10.csrf",{"title":167,"path":168,"stem":169,"icon":170},"Responses and errors","\u002Fmodules\u002Ferrors","4.modules\u002F11.errors","i-lucide-circle-alert",{"title":172,"path":173,"stem":174,"icon":175},"Rate-limit policies","\u002Fmodules\u002Frate-limits","4.modules\u002F12.rate-limits","i-lucide-gauge",false,{"title":178,"icon":179,"path":180,"stem":181,"children":182,"page":176},"Concepts","i-lucide-lightbulb","\u002Fconcepts","5.concepts",[183,188,193,198],{"title":184,"path":185,"stem":186,"icon":187},"AuthEndpoints compared with other options","\u002Fconcepts\u002Fcompare","5.concepts\u002F1.compare","i-lucide-git-compare",{"title":189,"path":190,"stem":191,"icon":192},"Stock Identity endpoints vs AuthEndpoints","\u002Fconcepts\u002Fstock-identity-vs-authendpoints","5.concepts\u002F2.stock-identity-vs-authendpoints","i-lucide-columns-2",{"title":194,"path":195,"stem":196,"icon":197},"Security model","\u002Fconcepts\u002Fsecurity-model","5.concepts\u002F3.security-model","i-lucide-shield",{"title":199,"path":200,"stem":201,"icon":202},"FAQ","\u002Fconcepts\u002Ffaq","5.concepts\u002F4.faq","i-lucide-circle-help",{"id":204,"title":205,"body":206,"description":205,"extension":690,"meta":691,"navigation":395,"path":692,"seo":693,"stem":698,"__hash__":699},"landing\u002Findex.md","",{"type":207,"value":208,"toc":688},"minimark",[209,449,658,684],[210,211,217,223,234,239,258],"u-page-hero",{"className":212,"orientation":216},[213,214,215],"dark:bg-gradient-to-b","from-zinc-900","to-zinc-950","horizontal",[218,219,220],"template",{"v-slot:top":205},[221,222],"hero-background",{},[218,224,225],{"v-slot:title":205},[226,227,228],"p",{},[229,230,233],"span",{"className":231},[232],"text-primary","AuthEndpoints",[218,235,236],{"v-slot:description":205},[226,237,238],{},"Ready-made sign-up and sign-in endpoints for ASP.NET Core Identity: passwords, passkeys, GitHub and Google, two-factor codes, cookies, and tokens.",[218,240,241,248],{"v-slot:links":205},[242,243,246],"u-button",{"size":244,"to":6,"trailing-icon":245},"xl","i-lucide-arrow-right",[226,247,5],{},[242,249,255],{"size":244,"to":250,"color":251,"variant":252,"icon":253,"target":254},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints","neutral","outline","i-simple-icons-github","_blank",[226,256,257],{},"GitHub",[259,260,263],"prose-pre",{"code":261,"filename":262},"builder.Services.AddAuthEndpoints\u003CAppUser, AppDbContext>(o =>\n{\n    o.Passkeys.ServerDomain = \"example.com\";\n});\nbuilder.Services.AddTransient\u003CIEmailSender\u003CAppUser>, MyEmailSender>();\n\nvar app = builder.Build();\napp.UseAuthEndpoints();\napp.MapAuthEndpoints\u003CAppUser>();\n","Program.cs",[264,265,268],"pre",{"className":266,"code":261,"filename":262,"language":267,"meta":205,"style":205},"language-cs shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cs",[269,270,271,314,320,352,358,390,397,420,433],"code",{"__ignoreMap":205},[229,272,275,279,283,286,288,292,295,299,302,305,308,311],{"class":273,"line":274},"line",1,[229,276,278],{"class":277},"sTEyZ","builder",[229,280,282],{"class":281},"sMK4o",".",[229,284,285],{"class":277},"Services",[229,287,282],{"class":281},[229,289,291],{"class":290},"s2Zo4","AddAuthEndpoints",[229,293,294],{"class":281},"\u003C",[229,296,298],{"class":297},"sBMFI","AppUser",[229,300,301],{"class":281},",",[229,303,304],{"class":297}," AppDbContext",[229,306,307],{"class":281},">(",[229,309,310],{"class":297},"o",[229,312,313],{"class":281}," =>\n",[229,315,317],{"class":273,"line":316},2,[229,318,319],{"class":281},"{\n",[229,321,323,326,328,331,333,336,339,342,346,349],{"class":273,"line":322},3,[229,324,325],{"class":277},"    o",[229,327,282],{"class":281},[229,329,330],{"class":277},"Passkeys",[229,332,282],{"class":281},[229,334,335],{"class":277},"ServerDomain ",[229,337,338],{"class":281},"=",[229,340,341],{"class":281}," \"",[229,343,345],{"class":344},"sfazB","example.com",[229,347,348],{"class":281},"\"",[229,350,351],{"class":281},";\n",[229,353,355],{"class":273,"line":354},4,[229,356,357],{"class":281},"});\n",[229,359,361,363,365,367,369,372,374,377,379,381,384,387],{"class":273,"line":360},5,[229,362,278],{"class":277},[229,364,282],{"class":281},[229,366,285],{"class":277},[229,368,282],{"class":281},[229,370,371],{"class":290},"AddTransient",[229,373,294],{"class":281},[229,375,376],{"class":297},"IEmailSender",[229,378,294],{"class":281},[229,380,298],{"class":297},[229,382,383],{"class":281},">,",[229,385,386],{"class":297}," MyEmailSender",[229,388,389],{"class":281},">();\n",[229,391,393],{"class":273,"line":392},6,[229,394,396],{"emptyLinePlaceholder":395},true,"\n",[229,398,400,403,406,409,412,414,417],{"class":273,"line":399},7,[229,401,402],{"class":297},"var",[229,404,405],{"class":297}," app",[229,407,408],{"class":281}," =",[229,410,411],{"class":277}," builder",[229,413,282],{"class":281},[229,415,416],{"class":290},"Build",[229,418,419],{"class":281},"();\n",[229,421,423,426,428,431],{"class":273,"line":422},8,[229,424,425],{"class":277},"app",[229,427,282],{"class":281},[229,429,430],{"class":290},"UseAuthEndpoints",[229,432,419],{"class":281},[229,434,436,438,440,443,445,447],{"class":273,"line":435},9,[229,437,425],{"class":277},[229,439,282],{"class":281},[229,441,442],{"class":290},"MapAuthEndpoints",[229,444,294],{"class":281},[229,446,298],{"class":297},[229,448,389],{"class":281},[450,451,454,459,464],"u-page-section",{"className":452},[453],"dark:bg-zinc-950",[218,455,456],{"v-slot:title":205},[226,457,458],{},"What AuthEndpoints can do",[218,460,461],{"v-slot:description":205},[226,462,463],{},"Each capability links to the guide that shows you how to use it.",[218,465,466,479,492,505,518,531,545,558,570,583,596,609,621,633,646],{"v-slot:features":205},[467,468,469,474],"u-page-feature",{"icon":44,"to":42},[218,470,471],{"v-slot:title":205},[226,472,473],{},"Register with an email and password",[218,475,476],{"v-slot:description":205},[226,477,478],{},"Create accounts and send confirmation email.",[467,480,482,487],{"icon":143,"to":481},"\u002Fguides\u002Fregistration#register-with-a-passkey",[218,483,484],{"v-slot:title":205},[226,485,486],{},"Register with a passkey",[218,488,489],{"v-slot:description":205},[226,490,491],{},"Create passwordless accounts with WebAuthn.",[467,493,495,500],{"icon":253,"to":494},"\u002Fguides\u002Fsign-in#sign-in-with-github-or-google",[218,496,497],{"v-slot:title":205},[226,498,499],{},"GitHub and Google sign-in",[218,501,502],{"v-slot:description":205},[226,503,504],{},"Add social sign-in in a separate preview package.",[467,506,508,513],{"icon":133,"to":507},"\u002Fguides\u002Fsign-in#sign-in-with-a-password-and-a-cookie",[218,509,510],{"v-slot:title":205},[226,511,512],{},"Cookie sessions",[218,514,515],{"v-slot:description":205},[226,516,517],{},"Sign browser users in with a secure app cookie.",[467,519,521,526],{"icon":59,"to":520},"\u002Fguides\u002Fsign-in#sign-in-with-a-password-and-identity-bearer-tokens",[218,522,523],{"v-slot:title":205},[226,524,525],{},"Identity bearer tokens",[218,527,528],{"v-slot:description":205},[226,529,530],{},"Issue access and refresh tokens for mobile apps.",[467,532,535,540],{"icon":533,"to":534},"i-lucide-key-square","\u002Fguides\u002Fsign-in#sign-in-with-a-password-and-a-jwt",[218,536,537],{"v-slot:title":205},[226,538,539],{},"JWT with a refresh cookie",[218,541,542],{"v-slot:description":205},[226,543,544],{},"Issue short-lived JWTs with rotating refresh tokens.",[467,546,548,553],{"icon":64,"to":547},"\u002Fguides\u002Fsign-in#sign-in-with-a-passkey",[218,549,550],{"v-slot:title":205},[226,551,552],{},"Passkey sign-in",[218,554,555],{"v-slot:description":205},[226,556,557],{},"Sign users in with a passkey.",[467,559,560,565],{"icon":84,"to":57},[218,561,562],{"v-slot:title":205},[226,563,564],{},"Two-factor authentication",[218,566,567],{"v-slot:description":205},[226,568,569],{},"Turn on authenticator codes and recovery codes.",[467,571,573,578],{"icon":572,"to":62},"i-lucide-rotate-ccw-key",[218,574,575],{"v-slot:title":205},[226,576,577],{},"Password reset",[218,579,580],{"v-slot:description":205},[226,581,582],{},"Send reset codes and set a new password.",[467,584,586,591],{"icon":585,"to":67},"i-lucide-mail",[218,587,588],{"v-slot:title":205},[226,589,590],{},"Email change",[218,592,593],{"v-slot:description":205},[226,594,595],{},"Change the email after the user confirms it.",[467,597,599,604],{"icon":598,"to":72},"i-lucide-list",[218,600,601],{"v-slot:title":205},[226,602,603],{},"Passkey management",[218,605,606],{"v-slot:description":205},[226,607,608],{},"Add, rename, and remove passkeys.",[467,610,611,616],{"icon":79,"to":77},[218,612,613],{"v-slot:title":205},[226,614,615],{},"Account linking",[218,617,618],{"v-slot:description":205},[226,619,620],{},"Link and unlink GitHub or Google accounts.",[467,622,623,628],{"icon":152,"to":82},[218,624,625],{"v-slot:title":205},[226,626,627],{},"Step-up (ReAuth)",[218,629,630],{"v-slot:description":205},[226,631,632],{},"Ask for proof again before sensitive changes.",[467,634,636,641],{"icon":635,"to":195},"i-lucide-lock",[218,637,638],{"v-slot:title":205},[226,639,640],{},"Built-in protection",[218,642,643],{"v-slot:description":205},[226,644,645],{},"CSRF, rate limits, lockout, and checks at startup.",[467,647,648,653],{"icon":113,"to":98},[218,649,650],{"v-slot:title":205},[226,651,652],{},"Composable modules",[218,654,655],{"v-slot:description":205},[226,656,657],{},"Map only the routes you need, on your own prefixes.",[450,659,661,666,671],{"className":660},[453],[218,662,663],{"v-slot:title":205},[226,664,665],{},"Map auth in minutes",[218,667,668],{"v-slot:description":205},[226,669,670],{},"Start with the facade, then compose modules when you need custom paths or a JWT-only stack.",[218,672,673,677,681],{"v-slot:links":205},[242,674,675],{"size":244,"to":19,"trailing-icon":245},[226,676,18],{},[242,678,679],{"size":244,"to":98,"color":251,"variant":252},[226,680,97],{},[682,683],"stars-bg",{},[685,686,687],"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}",{"title":205,"searchDepth":274,"depth":316,"links":689},[],"md",{},"\u002F",{"title":694,"description":695},"AuthEndpoints — ASP.NET Core Identity auth library",{"Ready-made sign-up and sign-in endpoints for ASP":696},{"NET Core Identity":697},"passwords, passkeys, GitHub and Google, two-factor codes, cookies, and tokens.","index","CqyrYDlRiJYN6_K7dutOCfKqTWhKWlCRwzL3ed1ehKA",1791123623495]