[{"data":1,"prerenderedAt":480},["ShallowReactive",2],{"navigation":3,"index":94},[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":96,"body":97,"description":96,"extension":473,"meta":474,"navigation":286,"path":475,"seo":476,"stem":478,"__hash__":479},"landing\u002Findex.md","",{"type":98,"value":99,"toc":471},"minimark",[100,340,440,467],[101,102,108,114,125,130,150],"u-page-hero",{"className":103,"orientation":107},[104,105,106],"dark:bg-gradient-to-b","from-zinc-900","to-zinc-950","horizontal",[109,110,111],"template",{"v-slot:top":96},[112,113],"hero-background",{},[109,115,116],{"v-slot:title":96},[117,118,119],"p",{},[120,121,124],"span",{"className":122},[123],"text-primary","AuthEndpoints",[109,126,127],{"v-slot:description":96},[117,128,129],{},"Ready-made ASP.NET Core Identity auth endpoints for web and mobile clients. Map cookie, JWT, and passkey flows — or compose only what you need.",[109,131,132,140],{"v-slot:links":96},[133,134,137],"u-button",{"size":135,"to":6,"trailing-icon":136},"xl","i-lucide-arrow-right",[117,138,139],{},"Get started",[133,141,147],{"size":135,"to":142,"color":143,"variant":144,"icon":145,"target":146},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints","neutral","outline","i-simple-icons-github","_blank",[117,148,149],{},"GitHub",[151,152,155],"prose-pre",{"code":153,"filename":154},"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",[156,157,160],"pre",{"className":158,"code":153,"filename":154,"language":159,"meta":96,"style":96},"language-cs shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cs",[161,162,163,206,212,243,249,281,288,311,324],"code",{"__ignoreMap":96},[120,164,167,171,175,178,180,184,187,191,194,197,200,203],{"class":165,"line":166},"line",1,[120,168,170],{"class":169},"sTEyZ","builder",[120,172,174],{"class":173},"sMK4o",".",[120,176,177],{"class":169},"Services",[120,179,174],{"class":173},[120,181,183],{"class":182},"s2Zo4","AddAuthEndpoints",[120,185,186],{"class":173},"\u003C",[120,188,190],{"class":189},"sBMFI","AppUser",[120,192,193],{"class":173},",",[120,195,196],{"class":189}," AppDbContext",[120,198,199],{"class":173},">(",[120,201,202],{"class":189},"o",[120,204,205],{"class":173}," =>\n",[120,207,209],{"class":165,"line":208},2,[120,210,211],{"class":173},"{\n",[120,213,215,218,220,222,224,227,230,233,237,240],{"class":165,"line":214},3,[120,216,217],{"class":169},"    o",[120,219,174],{"class":173},[120,221,79],{"class":169},[120,223,174],{"class":173},[120,225,226],{"class":169},"ServerDomain ",[120,228,229],{"class":173},"=",[120,231,232],{"class":173}," \"",[120,234,236],{"class":235},"sfazB","example.com",[120,238,239],{"class":173},"\"",[120,241,242],{"class":173},";\n",[120,244,246],{"class":165,"line":245},4,[120,247,248],{"class":173},"});\n",[120,250,252,254,256,258,260,263,265,268,270,272,275,278],{"class":165,"line":251},5,[120,253,170],{"class":169},[120,255,174],{"class":173},[120,257,177],{"class":169},[120,259,174],{"class":173},[120,261,262],{"class":182},"AddTransient",[120,264,186],{"class":173},[120,266,267],{"class":189},"IEmailSender",[120,269,186],{"class":173},[120,271,190],{"class":189},[120,273,274],{"class":173},">,",[120,276,277],{"class":189}," MyEmailSender",[120,279,280],{"class":173},">();\n",[120,282,284],{"class":165,"line":283},6,[120,285,287],{"emptyLinePlaceholder":286},true,"\n",[120,289,291,294,297,300,303,305,308],{"class":165,"line":290},7,[120,292,293],{"class":189},"var",[120,295,296],{"class":189}," app",[120,298,299],{"class":173}," =",[120,301,302],{"class":169}," builder",[120,304,174],{"class":173},[120,306,307],{"class":182},"Build",[120,309,310],{"class":173},"();\n",[120,312,314,317,319,322],{"class":165,"line":313},8,[120,315,316],{"class":169},"app",[120,318,174],{"class":173},[120,320,321],{"class":182},"UseAuthEndpoints",[120,323,310],{"class":173},[120,325,327,329,331,334,336,338],{"class":165,"line":326},9,[120,328,316],{"class":169},[120,330,174],{"class":173},[120,332,333],{"class":182},"MapAuthEndpoints",[120,335,186],{"class":173},[120,337,190],{"class":189},[120,339,280],{"class":173},[341,342,345,350,355],"u-page-section",{"className":343},[344],"dark:bg-zinc-950",[109,346,347],{"v-slot:title":96},[117,348,349],{},"Built for first-party API auth",[109,351,352],{"v-slot:description":96},[117,353,354],{},"Ship registration, sign-in, and account management without wiring every Identity endpoint yourself.",[109,356,357,378,390,403,415,427],{"v-slot:features":96},[358,359,361,366],"u-page-feature",{"icon":360},"i-lucide-zap",[109,362,363],{"v-slot:title":96},[117,364,365],{},"Opinionated quick start",[109,367,368],{"v-slot:description":96},[117,369,370,372,373,372,375,377],{},[161,371,183],{}," \u002F ",[161,374,321],{},[161,376,333],{}," give you cookie Identity and passkeys with secure defaults.",[358,379,380,385],{"icon":51},[109,381,382],{"v-slot:title":96},[117,383,384],{},"Composable modules",[109,386,387],{"v-slot:description":96},[117,388,389],{},"Mix management, cookie, bearer, JWT, and passkeys on the route prefixes your host needs.",[358,391,393,398],{"icon":392},"i-lucide-key-round",[109,394,395],{"v-slot:title":96},[117,396,397],{},"Cookie, JWT, and passkeys",[109,399,400],{"v-slot:description":96},[117,401,402],{},"Choose cookie sessions, Identity bearer tokens, JWT with refresh cookies, and WebAuthn passwordless.",[358,404,405,410],{"icon":31},[109,406,407],{"v-slot:title":96},[117,408,409],{},"Hardened defaults",[109,411,412],{"v-slot:description":96},[117,413,414],{},"Rate limiting, antiforgery for cookie flows, lockout-aware login, and hashed JWT refresh tokens with reuse detection.",[358,416,417,422],{"icon":87},[109,418,419],{"v-slot:title":96},[117,420,421],{},"ReAuth step-up",[109,423,424],{"v-slot:description":96},[117,425,426],{},"Confirm identity before sensitive manage and passkey mutations — cookie or header token for APIs.",[358,428,430,435],{"icon":429},"i-lucide-factory",[109,431,432],{"v-slot:title":96},[117,433,434],{},"Production validators",[109,436,437],{"v-slot:description":96},[117,438,439],{},"Production rejects no-op email senders, missing passkey domains, and default JWT issuer\u002Faudience values.",[341,441,443,448,453],{"className":442},[344],[109,444,445],{"v-slot:title":96},[117,446,447],{},"Map auth in minutes",[109,449,450],{"v-slot:description":96},[117,451,452],{},"Start with the facade, then compose modules when you need custom paths or a JWT-only stack.",[109,454,455,459,464],{"v-slot:links":96},[133,456,457],{"size":135,"to":19,"trailing-icon":136},[117,458,18],{},[133,460,461],{"size":135,"to":35,"color":143,"variant":144},[117,462,463],{},"Composable endpoints",[465,466],"stars-bg",{},[468,469,470],"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":96,"searchDepth":166,"depth":208,"links":472},[],"md",{},"\u002F",{"title":124,"description":477},"Ready-made ASP.NET Core Identity auth endpoints for web and mobile clients — cookies, JWT, passkeys, and composable modules.","index","c8HaH8OzFU-h-DcY42vLe29cD60kEEazUoqBBN32ypw",1785661248372]