[{"data":1,"prerenderedAt":488},["ShallowReactive",2],{"navigation":3,"\u002Fmodules\u002Fidentity-management":94,"\u002Fmodules\u002Fidentity-management-surround":483},[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":59,"body":96,"description":476,"extension":477,"links":478,"meta":479,"navigation":480,"path":60,"seo":481,"stem":61,"__hash__":482},"docs\u002F3.modules\u002F1.identity-management.md",{"type":97,"value":98,"toc":468},"minimark",[99,115,120,128,132,198,202,208,405,409,412,422,426,449,453,464],[100,101,102,103,107,108,111,112,114],"p",{},"Maps account lifecycle endpoints. Pair with a sign-in module (",[104,105,106],"a",{"href":65},"cookie",", ",[104,109,110],{"href":70},"bearer",", or ",[104,113,74],{"href":75},").",[116,117,119],"h2",{"id":118},"di","DI",[100,121,122,123,127],{},"Registered by the facade (",[124,125,126],"code",{},"AddAuthEndpoints",") or manually via Identity API endpoints + EF stores + token providers.",[116,129,131],{"id":130},"map","Map",[133,134,139],"pre",{"className":135,"code":136,"language":137,"meta":138,"style":138},"language-cs shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","app.MapGroup(\"\u002Fidentity\").MapIdentityManagementApi\u003CAppUser>();\n\u002F\u002F Optional: unique confirm email name when mapping twice\n\u002F\u002F .MapIdentityManagementApi\u003CAppUser>(confirmEmailEndpointName: \"BearerConfirmEmail\");\n","cs","",[124,140,141,185,192],{"__ignoreMap":138},[142,143,146,150,154,158,161,164,168,170,172,175,178,182],"span",{"class":144,"line":145},"line",1,[142,147,149],{"class":148},"sTEyZ","app",[142,151,153],{"class":152},"sMK4o",".",[142,155,157],{"class":156},"s2Zo4","MapGroup",[142,159,160],{"class":152},"(",[142,162,163],{"class":152},"\"",[142,165,167],{"class":166},"sfazB","\u002Fidentity",[142,169,163],{"class":152},[142,171,114],{"class":152},[142,173,174],{"class":156},"MapIdentityManagementApi",[142,176,177],{"class":152},"\u003C",[142,179,181],{"class":180},"sBMFI","AppUser",[142,183,184],{"class":152},">();\n",[142,186,188],{"class":144,"line":187},2,[142,189,191],{"class":190},"sHwdD","\u002F\u002F Optional: unique confirm email name when mapping twice\n",[142,193,195],{"class":144,"line":194},3,[142,196,197],{"class":190},"\u002F\u002F .MapIdentityManagementApi\u003CAppUser>(confirmEmailEndpointName: \"BearerConfirmEmail\");\n",[116,199,201],{"id":200},"routes","Routes",[100,203,204,205,207],{},"Relative to the group prefix (facade default ",[124,206,167],{},"):",[209,210,211,227],"table",{},[212,213,214],"thead",{},[215,216,217,221,224],"tr",{},[218,219,220],"th",{},"Method",[218,222,223],{},"Path",[218,225,226],{},"Notes",[228,229,230,250,265,279,293,306,323,337,351,365,378,392],"tbody",{},[215,231,232,238,243],{},[233,234,235],"td",{},[124,236,237],{},"POST",[233,239,240],{},[124,241,242],{},"\u002Fregister",[233,244,245,246,249],{},"Creates user; duplicate email returns ",[124,247,248],{},"200 OK"," (no enumeration). Rate-limited.",[215,251,252,257,262],{},[233,253,254],{},[124,255,256],{},"GET",[233,258,259],{},[124,260,261],{},"\u002FconfirmEmail",[233,263,264],{},"Confirms email via link token",[215,266,267,271,276],{},[233,268,269],{},[124,270,237],{},[233,272,273],{},[124,274,275],{},"\u002FresendConfirmationEmail",[233,277,278],{},"Auth + CSRF + rate limit",[215,280,281,285,290],{},[233,282,283],{},[124,284,237],{},[233,286,287],{},[124,288,289],{},"\u002FforgotPassword",[233,291,292],{},"Rate-limited",[215,294,295,299,304],{},[233,296,297],{},[124,298,237],{},[233,300,301],{},[124,302,303],{},"\u002FresetPassword",[233,305,292],{},[215,307,308,312,317],{},[233,309,310],{},[124,311,256],{},[233,313,314],{},[124,315,316],{},"\u002Fmanage\u002FauthMethods",[233,318,319,320,322],{},"ReAuth methods (see ",[104,321,84],{"href":85},")",[215,324,325,329,334],{},[233,326,327],{},[124,328,237],{},[233,330,331],{},[124,332,333],{},"\u002FconfirmIdentity",[233,335,336],{},"Step-up proof",[215,338,339,343,348],{},[233,340,341],{},[124,342,237],{},[233,344,345],{},[124,346,347],{},"\u002FconfirmIdentity\u002FpasskeyOptions",[233,349,350],{},"Passkey options for step-up",[215,352,353,357,362],{},[233,354,355],{},[124,356,256],{},[233,358,359],{},[124,360,361],{},"\u002Fmanage\u002F2fa",[233,363,364],{},"2FA status",[215,366,367,371,375],{},[233,368,369],{},[124,370,237],{},[233,372,373],{},[124,374,361],{},[233,376,377],{},"Enable\u002Fdisable 2FA — CSRF + ReAuth",[215,379,380,384,389],{},[233,381,382],{},[124,383,256],{},[233,385,386],{},[124,387,388],{},"\u002Fmanage\u002Finfo",[233,390,391],{},"Current user info",[215,393,394,398,402],{},[233,395,396],{},[124,397,237],{},[233,399,400],{},[124,401,388],{},[233,403,404],{},"Update info — CSRF + ReAuth",[116,406,408],{"id":407},"authorization","Authorization",[100,410,411],{},"Management authorize attribute accepts registered schemes among: application cookie, Identity bearer, and JWT bearer.",[100,413,414,415,419,420,153],{},"Sensitive manage mutations require ",[416,417,418],"strong",{},"antiforgery"," and ",[416,421,84],{},[116,423,425],{"id":424},"gotchas","Gotchas",[427,428,429,439,446],"ul",{},[430,431,432,433,436,437,114],"li",{},"Map management ",[416,434,435],{},"once"," in production (see ",[104,438,42],{"href":43},[430,440,441,442,445],{},"Production requires a real ",[124,443,444],{},"IEmailSender\u003CTUser>"," for confirmation and reset emails.",[430,447,448],{},"Register alone does not sign the user in — use a sign-in module.",[116,450,452],{"id":451},"related","Related",[427,454,455,460],{},[430,456,457],{},[104,458,459],{"href":43},"Composable requirements",[430,461,462],{},[104,463,84],{"href":85},[465,466,467],"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 .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}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);}",{"title":138,"searchDepth":145,"depth":187,"links":469},[470,471,472,473,474,475],{"id":118,"depth":187,"text":119},{"id":130,"depth":187,"text":131},{"id":200,"depth":187,"text":201},{"id":407,"depth":187,"text":408},{"id":424,"depth":187,"text":425},{"id":451,"depth":187,"text":452},"Account lifecycle endpoints — register, confirm, forgot\u002Freset password, manage info and 2FA.","md",null,{},{"icon":62},{"title":59,"description":476},"YOBhVctOp17KBItptGxVXT4Qp9kcbUh3Ug1C_cpUvJQ",[484,486],{"title":47,"path":48,"stem":49,"description":485,"icon":50,"children":-1},"Common composition patterns for cookie SPA, Identity bearer, JWT-only, and custom paths.",{"title":64,"path":65,"stem":66,"description":487,"icon":67,"children":-1},"Identity cookie login, logout, and CSRF token endpoints for SPA hosts.",1785399440325]