[{"data":1,"prerenderedAt":633},["ShallowReactive",2],{"navigation":3,"changelog-versions":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,[95,200,301,378,427,487,535,574],{"id":96,"title":97,"badge":98,"body":99,"date":190,"description":191,"extension":192,"meta":193,"navigation":194,"path":195,"seo":196,"stem":197,"tag":198,"__hash__":199},"versions\u002Fversions\u002Fexternal-oauth-v3.0.0-preview.2.md","AuthEndpoints.External.OAuth 3.0.0-preview.2","Preview",{"type":100,"value":101,"toc":182},"minimark",[102,107,160,164],[103,104,106],"h3",{"id":105},"authendpointsexternaloauth","AuthEndpoints.External.OAuth",[108,109,110,114,122,129,132,139,148,154],"ul",{},[111,112,113],"li",{},"Require verified email by default; auto-link by email only when verified",[111,115,116,117,121],{},"Clear ",[118,119,120],"code",{},"Identity.External"," cookie after successful sign-in \u002F link",[111,123,124,125,128],{},"Stricter ",[118,126,127],{},"returnUrl"," (relative-only by default; optional origin allowlist)",[111,130,131],{},"Options validation for External settings and provider ClientId\u002FSecret",[111,133,134,135,138],{},"Browser error redirects to ",[118,136,137],{},"ErrorPath"," (JSON Problem when client prefers JSON)",[111,140,141,144,145],{},[118,142,143],{},"AddLoginRateLimiting"," registered from ",[118,146,147],{},"AddExternalAuthEndpoints",[111,149,150,153],{},[118,151,152],{},"JwtExternalLoginCompleter"," for JWT refresh-cookie completion",[111,155,156,159],{},[118,157,158],{},"MapExternalAccountEndpoints"," for list \u002F link \u002F unlink while signed in",[103,161,163],{"id":162},"links","Links",[108,165,166,175],{},[111,167,168],{},[169,170,174],"a",{"href":171,"rel":172},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Freleases\u002Ftag\u002Fexternal-oauth-v3.0.0-preview.2",[173],"nofollow","GitHub release",[111,176,177],{},[169,178,181],{"href":179,"rel":180},"https:\u002F\u002Fmadeyoga.github.io\u002FAuthEndpoints\u002Fmodules\u002Fexternal-oauth",[173],"External OAuth docs",{"title":183,"searchDepth":184,"depth":185,"links":186},"",1,2,[187,189],{"id":105,"depth":188,"text":106},3,{"id":162,"depth":188,"text":163},"2026-07-30","Production hardening — verified email, safer linking, error redirects, JWT completer, account link\u002Funlink.","md",{},true,"\u002Fversions\u002Fexternal-oauth-v3.0.0-preview.2",{"title":97,"description":191},"versions\u002Fexternal-oauth-v3.0.0-preview.2","external-oauth-v3.0.0-preview.2","C6S6gT1iEY0uBe537y1wWgujHF_kFwz08H7w4W1lsS0",{"id":201,"title":202,"badge":203,"body":204,"date":190,"description":295,"extension":192,"meta":296,"navigation":194,"path":297,"seo":298,"stem":299,"tag":202,"__hash__":300},"versions\u002Fversions\u002Fv3.0.0-rc.3.md","v3.0.0-rc.3","Latest",{"type":100,"value":205,"toc":290},[206,210,243,247,273,275],[103,207,209],{"id":208},"authendpoints","AuthEndpoints",[108,211,212,231],{},[111,213,214,215,218,219,222,223,226,227,230],{},"Added ",[118,216,217],{},"AddAuthEndpoints\u003CTUser, TRole, TContext>"," so Identity roles register ",[118,220,221],{},"IRoleStore"," correctly (no second ",[118,224,225],{},"AddEntityFrameworkStores"," after ",[118,228,229],{},"AddRoles",")",[111,232,233,234,236,237,240,241,230],{},"Made ",[118,235,143],{}," \u002F ",[118,238,239],{},"AddIdentityEndpointRateLimiting"," public for compose scenarios (e.g. ",[118,242,106],{},[103,244,246],{"id":245},"packages","Packages",[108,248,249,258],{},[111,250,251,254,255],{},[252,253,209],"strong",{}," ",[118,256,257],{},"3.0.0-rc.3",[111,259,260,262,263,266,267,270,271],{},[252,261,106],{}," (unchanged) ",[118,264,265],{},"3.0.0-preview.2"," — requires AuthEndpoints ",[252,268,269],{},"rc.3+"," for ",[118,272,143],{},[103,274,163],{"id":162},[108,276,277,283],{},[111,278,279],{},[169,280,174],{"href":281,"rel":282},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Freleases\u002Ftag\u002Fv3.0.0-rc.3",[173],[111,284,285],{},[169,286,289],{"href":287,"rel":288},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Fcompare\u002Fv3.0.0-rc.2...v3.0.0-rc.3",[173],"Compare",{"title":183,"searchDepth":184,"depth":185,"links":291},[292,293,294],{"id":208,"depth":188,"text":209},{"id":245,"depth":188,"text":246},{"id":162,"depth":188,"text":163},"Roles-aware AddAuthEndpoints overload and public login rate-limiting API.",{},"\u002Fversions\u002Fv3.0.0-rc.3",{"title":202,"description":295},"versions\u002Fv3.0.0-rc.3","Ge39SKqoEKjrhN-_GGVh5-NANB2j63Zbbxow0EzA8HM",{"id":302,"title":303,"badge":98,"body":304,"date":370,"description":371,"extension":192,"meta":372,"navigation":194,"path":373,"seo":374,"stem":375,"tag":376,"__hash__":377},"versions\u002Fversions\u002Fexternal-oauth-v3.0.0-preview.1.md","AuthEndpoints.External.OAuth 3.0.0-preview.1",{"type":100,"value":305,"toc":366},[306,308,351,353],[103,307,106],{"id":105},[108,309,310,315,321,337,344],{},[111,311,214,312,314],{},[118,313,106],{}," as a separate preview NuGet package",[111,316,317,318,320],{},"Shared Core: ",[118,319,147],{},", provisioning service, pluggable cookie completer, shared login\u002Fcallback handlers",[111,322,323,324,236,327,330,331,236,334,230],{},"GitHub and Google provider modules (",[118,325,326],{},"AddGitHub",[118,328,329],{},"MapGitHubAuthEndpoints",", ",[118,332,333],{},"AddGoogle",[118,335,336],{},"MapGoogleAuthEndpoints",[111,338,339,340,343],{},"Default completion issues an Identity application cookie; ",[118,341,342],{},"AddCompleter\u003CT>"," for future JWT (or other) modes",[111,345,346,347,350],{},"Compose-only — not wired into the ",[118,348,349],{},"AddAuthEndpoints"," facade",[103,352,163],{"id":162},[108,354,355,361],{},[111,356,357],{},[169,358,174],{"href":359,"rel":360},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Freleases\u002Ftag\u002Fexternal-oauth-v3.0.0-preview.1",[173],[111,362,363],{},[169,364,181],{"href":179,"rel":365},[173],{"title":183,"searchDepth":184,"depth":185,"links":367},[368,369],{"id":105,"depth":188,"text":106},{"id":162,"depth":188,"text":163},"2026-07-29","First preview of modular GitHub\u002FGoogle OAuth endpoints.",{},"\u002Fversions\u002Fexternal-oauth-v3.0.0-preview.1",{"title":303,"description":371},"versions\u002Fexternal-oauth-v3.0.0-preview.1","external-oauth-v3.0.0-preview.1","ILtc4MiyGjQFbz-mBHYZ23n_FkUKvfZ2R9wyXka7Nsk",{"id":379,"title":380,"badge":381,"body":382,"date":420,"description":421,"extension":192,"meta":422,"navigation":194,"path":423,"seo":424,"stem":425,"tag":380,"__hash__":426},"versions\u002Fversions\u002Fv3.0.0-rc.2.md","v3.0.0-rc.2","RC",{"type":100,"value":383,"toc":416},[384,388,400,402],[103,385,387],{"id":386},"changed","Changed",[108,389,390,397],{},[111,391,392,393,396],{},"Split Identity ",[252,394,395],{},"management"," from sign-in so hosts can compose cookie, bearer, or JWT stacks independently",[111,398,399],{},"Hardened JWT defaults (hashed refresh tokens, production issuer\u002Faudience\u002Fkey validation)",[103,401,163],{"id":162},[108,403,404,410],{},[111,405,406],{},[169,407,174],{"href":408,"rel":409},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Freleases\u002Ftag\u002Fv3.0.0-rc.2",[173],[111,411,412],{},[169,413,289],{"href":414,"rel":415},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Fcompare\u002Fv3.0.0-rc.1...v3.0.0-rc.2",[173],{"title":183,"searchDepth":184,"depth":185,"links":417},[418,419],{"id":386,"depth":188,"text":387},{"id":162,"depth":188,"text":163},"2026-07-26","Split Identity management from sign-in and harden JWT defaults.",{},"\u002Fversions\u002Fv3.0.0-rc.2",{"title":380,"description":421},"versions\u002Fv3.0.0-rc.2","ugOnihQhGZSaX932CEmMUYiuFkOgp4yLoSr6HE2ZLQY",{"id":428,"title":429,"badge":381,"body":430,"date":480,"description":481,"extension":192,"meta":482,"navigation":194,"path":483,"seo":484,"stem":485,"tag":429,"__hash__":486},"versions\u002Fversions\u002Fv3.0.0-rc.1.md","v3.0.0-rc.1",{"type":100,"value":431,"toc":475},[432,436,452,454,459,461],[103,433,435],{"id":434},"added","Added",[108,437,438,449],{},[111,439,440,441,236,443,236,446],{},"Opinionated facade: ",[118,442,349],{},[118,444,445],{},"UseAuthEndpoints",[118,447,448],{},"MapAuthEndpoints",[111,450,451],{},"Identity cookie and bearer endpoint integration tests",[103,453,387],{"id":386},[108,455,456],{},[111,457,458],{},"Hardened Identity and Passkey flows for the 3.0 release candidate",[103,460,163],{"id":162},[108,462,463,469],{},[111,464,465],{},[169,466,174],{"href":467,"rel":468},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Freleases\u002Ftag\u002Fv3.0.0-rc.1",[173],[111,470,471],{},[169,472,289],{"href":473,"rel":474},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Fcompare\u002F3.0.0-alpha.11...v3.0.0-rc.1",[173],{"title":183,"searchDepth":184,"depth":185,"links":476},[477,478,479],{"id":434,"depth":188,"text":435},{"id":386,"depth":188,"text":387},{"id":162,"depth":188,"text":163},"2026-07-25","Identity\u002FPasskey hardening and the opinionated AddAuthEndpoints facade.",{},"\u002Fversions\u002Fv3.0.0-rc.1",{"title":429,"description":481},"versions\u002Fv3.0.0-rc.1","zX209qkT1QyKgjBjv3r1jXjpvP7j_Qp2FlHNkx7QUnw",{"id":488,"title":489,"badge":490,"body":491,"date":528,"description":529,"extension":192,"meta":530,"navigation":194,"path":531,"seo":532,"stem":533,"tag":489,"__hash__":534},"versions\u002Fversions\u002F3.0.0-alpha.11.md","3.0.0-alpha.11","Alpha",{"type":100,"value":492,"toc":523},[493,495,500,502,507,509],[103,494,435],{"id":434},[108,496,497],{},[111,498,499],{},"Passwordless PasskeyEndpoints (register \u002F login \u002F manage credentials)",[103,501,387],{"id":386},[108,503,504],{},[111,505,506],{},"Hardened JWT authentication and refresh-token handling",[103,508,163],{"id":162},[108,510,511,517],{},[111,512,513],{},[169,514,174],{"href":515,"rel":516},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Freleases\u002Ftag\u002F3.0.0-alpha.11",[173],[111,518,519],{},[169,520,289],{"href":521,"rel":522},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Fcompare\u002Fv3.0.0-alpha.8...3.0.0-alpha.11",[173],{"title":183,"searchDepth":184,"depth":185,"links":524},[525,526,527],{"id":434,"depth":188,"text":435},{"id":386,"depth":188,"text":387},{"id":162,"depth":188,"text":163},"2026-07-24","Hardened JWT auth and finished passwordless PasskeyEndpoints.",{},"\u002Fversions\u002F0.0-alpha.11",{"title":489,"description":529},"versions\u002F3.0.0-alpha.11","pEVitbxAfR40P3jqShVLi2bMLWhNE8HhcUQJBIvs_n4",{"id":536,"title":537,"badge":490,"body":538,"date":567,"description":568,"extension":192,"meta":569,"navigation":194,"path":570,"seo":571,"stem":572,"tag":537,"__hash__":573},"versions\u002Fversions\u002Fv3.0.0-alpha.8.md","v3.0.0-alpha.8",{"type":100,"value":539,"toc":563},[540,542,547,549],[103,541,387],{"id":386},[108,543,544],{},[111,545,546],{},"Updated the ReAuth cookie authentication scheme",[103,548,163],{"id":162},[108,550,551,557],{},[111,552,553],{},[169,554,174],{"href":555,"rel":556},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Freleases\u002Ftag\u002Fv3.0.0-alpha.8",[173],[111,558,559],{},[169,560,289],{"href":561,"rel":562},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Fcompare\u002Fv3.0.0-alpha.7...v3.0.0-alpha.8",[173],{"title":183,"searchDepth":184,"depth":185,"links":564},[565,566],{"id":386,"depth":188,"text":387},{"id":162,"depth":188,"text":163},"2025-12-20","Updated ReAuth cookie scheme.",{},"\u002Fversions\u002Fv3.0.0-alpha.8",{"title":537,"description":568},"versions\u002Fv3.0.0-alpha.8","1eF2zjgMiT_MfzOJCgCjWpcG7yLnUmZ7WcbYxY0Mwoo",{"id":575,"title":576,"badge":490,"body":577,"date":626,"description":627,"extension":192,"meta":628,"navigation":194,"path":629,"seo":630,"stem":631,"tag":576,"__hash__":632},"versions\u002Fversions\u002Fv3.0.0-alpha.1.md","v3.0.0-alpha.1",{"type":100,"value":578,"toc":621},[579,581,595,597,605,607],[103,580,435],{"id":434},[108,582,583,586,589],{},[111,584,585],{},"Cookie authentication endpoints",[111,587,588],{},"Leverage official ASP.NET Core Identity API endpoints",[111,590,591,592],{},"Step-up reauthentication via ",[118,593,594],{},"\u002FconfirmIdentity",[103,596,387],{"id":386},[108,598,599,602],{},[111,600,601],{},"Reorganized and simplified project structure",[111,603,604],{},"Breaking changes expected along the 3.0 alpha path",[103,606,163],{"id":162},[108,608,609,615],{},[111,610,611],{},[169,612,174],{"href":613,"rel":614},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Freleases\u002Ftag\u002Fv3.0.0-alpha.1",[173],[111,616,617],{},[169,618,289],{"href":619,"rel":620},"https:\u002F\u002Fgithub.com\u002Fmadeyoga\u002FAuthEndpoints\u002Fcompare\u002Fv2.2.0...v3.0.0-alpha.1",[173],{"title":183,"searchDepth":184,"depth":185,"links":622},[623,624,625],{"id":434,"depth":188,"text":435},{"id":386,"depth":188,"text":387},{"id":162,"depth":188,"text":163},"2025-10-16","Cookie auth, Identity API endpoints, and step-up ReAuth — start of the 3.0 line.",{},"\u002Fversions\u002Fv3.0.0-alpha.1",{"title":576,"description":627},"versions\u002Fv3.0.0-alpha.1","aO4EdSxAX1aqM6BWiQKrDdAFYW1RccKjOdnT-KjFLLM",1785399439560]