[{"data":1,"prerenderedAt":884},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started\u002Fconfiguration":94,"\u002Fgetting-started\u002Fconfiguration-surround":879},[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":23,"body":96,"description":872,"extension":873,"links":874,"meta":875,"navigation":876,"path":24,"seo":877,"stem":25,"__hash__":878},"docs\u002F1.getting-started\u002F4.configuration.md",{"type":97,"value":98,"toc":863},"minimark",[99,112,117,276,279,285,335,338,343,403,412,415,477,488,492,853,859],[100,101,102,103,107,108,111],"p",{},"Configure the facade via ",[104,105,106],"code",{},"AddAuthEndpoints\u003CTUser, TContext>(…)"," or, with roles, ",[104,109,110],{},"AddAuthEndpoints\u003CTUser, TRole, TContext>(…)",".",[113,114,116],"h2",{"id":115},"authendpointsoptions","AuthEndpointsOptions",[118,119,120,136],"table",{},[121,122,123],"thead",{},[124,125,126,130,133],"tr",{},[127,128,129],"th",{},"Property",[127,131,132],{},"Default",[127,134,135],{},"Description",[137,138,139,155,170,185,202,218,237,258],"tbody",{},[124,140,141,147,152],{},[142,143,144],"td",{},[104,145,146],{},"IdentityPath",[142,148,149],{},[104,150,151],{},"\u002Fidentity",[142,153,154],{},"Route prefix for Identity management + cookie sign-in",[124,156,157,162,167],{},[142,158,159],{},[104,160,161],{},"PasskeyPath",[142,163,164],{},[104,165,166],{},"\u002Faccount",[142,168,169],{},"Route prefix for passkey endpoints",[124,171,172,177,182],{},[142,173,174],{},[104,175,176],{},"RequireConfirmedAccount",[142,178,179],{},[104,180,181],{},"true",[142,183,184],{},"Identity requires a confirmed account before sign-in",[124,186,187,191,194],{},[142,188,189],{},[104,190,79],{},[142,192,193],{},"(enabled)",[142,195,196,197],{},"Nested ",[198,199,201],"a",{"href":200},"#passkeys","passkey options",[124,203,204,209,212],{},[142,205,206],{},[104,207,208],{},"Jwt",[142,210,211],{},"(disabled)",[142,213,196,214],{},[198,215,217],{"href":216},"#jwt","JWT options",[124,219,220,225,230],{},[142,221,222],{},[104,223,224],{},"ConfigureIdentity",[142,226,227],{},[104,228,229],{},"null",[142,231,232,233,236],{},"Optional ",[104,234,235],{},"Action\u003CIdentityOptions>"," applied after secure defaults",[124,238,239,244,248],{},[142,240,241],{},[104,242,243],{},"ConfigurePasskeys",[142,245,246],{},[104,247,229],{},[142,249,232,250,253,254,257],{},[104,251,252],{},"Action\u003CIdentityPasskeyOptions>"," after ",[104,255,256],{},"ServerDomain"," is applied",[124,259,260,265,269],{},[142,261,262],{},[104,263,264],{},"RequireEmailSenderInProduction",[142,266,267],{},[104,268,181],{},[142,270,271,272,275],{},"Production must register a real ",[104,273,274],{},"IEmailSender\u003CTUser>"," (not Identity's no-op)",[113,277,79],{"id":278},"passkeys",[100,280,281,284],{},[104,282,283],{},"AuthEndpointsPasskeyOptions",":",[118,286,287,297],{},[121,288,289],{},[124,290,291,293,295],{},[127,292,129],{},[127,294,132],{},[127,296,135],{},[137,298,299,313],{},[124,300,301,306,310],{},[142,302,303],{},[104,304,305],{},"Enabled",[142,307,308],{},[104,309,181],{},[142,311,312],{},"When false, passkey DI and mapping are skipped",[124,314,315,319,323],{},[142,316,317],{},[104,318,256],{},[142,320,321],{},[104,322,229],{},[142,324,325,326,329,330,334],{},"WebAuthn relying-party domain (e.g. ",[104,327,328],{},"example.com","). ",[331,332,333],"strong",{},"Required in Production"," when enabled",[113,336,74],{"id":337},"jwt",[100,339,340,284],{},[104,341,342],{},"AuthEndpointsJwtOptions",[118,344,345,355],{},[121,346,347],{},[124,348,349,351,353],{},[127,350,129],{},[127,352,132],{},[127,354,135],{},[137,356,357,371,386],{},[124,358,359,363,368],{},[142,360,361],{},[104,362,305],{},[142,364,365],{},[104,366,367],{},"false",[142,369,370],{},"When true, registers and maps JWT endpoints",[124,372,373,378,383],{},[142,374,375],{},[104,376,377],{},"Path",[142,379,380],{},[104,381,382],{},"\u002Fauth",[142,384,385],{},"Route prefix for JWT endpoints",[124,387,388,393,397],{},[142,389,390],{},[104,391,392],{},"Configure",[142,394,395],{},[104,396,229],{},[142,398,232,399,402],{},[104,400,401],{},"Action\u003CSimpleJwtOptions>"," for issuer, audience, signing, lifetimes",[404,405,407,408,411],"h3",{"id":406},"simplejwtoptions-via-jwtconfigure","SimpleJwtOptions (via ",[104,409,410],{},"Jwt.Configure",")",[100,413,414],{},"Common settings:",[118,416,417,426],{},[121,418,419],{},[124,420,421,423],{},[127,422,129],{},[127,424,425],{},"Notes",[137,427,428,447,457,467],{},[124,429,430,439],{},[142,431,432,435,436],{},[104,433,434],{},"Issuer"," \u002F ",[104,437,438],{},"Audience",[142,440,441,442,435,444,411],{},"Production rejects the library defaults (",[104,443,208],{},[104,445,446],{},"JwtAudience",[124,448,449,454],{},[142,450,451],{},[104,452,453],{},"AccessTokenLifetime",[142,455,456],{},"Default 15 minutes",[124,458,459,464],{},[142,460,461],{},[104,462,463],{},"SigningOptions",[142,465,466],{},"Symmetric (key ≥ 32 UTF-8 bytes), RSA, ECDSA, or X509",[124,468,469,474],{},[142,470,471],{},[104,472,473],{},"TokenValidationParameters",[142,475,476],{},"Optional override of validation parameters",[100,478,479,480,483,484,487],{},"When JWT is enabled, call ",[104,481,482],{},"modelBuilder.UseRefreshToken()"," on your ",[104,485,486],{},"DbContext"," and migrate.",[113,489,491],{"id":490},"example","Example",[493,494,499],"pre",{"className":495,"code":496,"language":497,"meta":498,"style":498},"language-cs shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","builder.Services.AddAuthEndpoints\u003CAppUser, AppDbContext>(o =>\n{\n    o.IdentityPath = \"\u002Fauth\u002Fcookie\";\n    o.PasskeyPath = \"\u002Fauth\u002Fpasskey\";\n    o.RequireConfirmedAccount = true;\n    o.Passkeys.ServerDomain = \"example.com\";\n    o.ConfigureIdentity = identity =>\n    {\n        identity.Password.RequiredLength = 10;\n    };\n    o.Jwt.Enabled = true;\n    o.Jwt.Path = \"\u002Fauth\u002Fjwt\";\n    o.Jwt.Configure = jwt =>\n    {\n        jwt.Issuer = \"https:\u002F\u002Fexample.com\";\n        jwt.Audience = \"https:\u002F\u002Fexample.com\";\n        jwt.SigningOptions.SymmetricKey = builder.Configuration[\"Jwt:SymmetricKey\"];\n    };\n});\n","cs","",[104,500,501,544,550,577,598,616,640,657,663,687,693,713,738,759,764,786,806,842,847],{"__ignoreMap":498},[502,503,506,510,513,516,518,522,525,529,532,535,538,541],"span",{"class":504,"line":505},"line",1,[502,507,509],{"class":508},"sTEyZ","builder",[502,511,111],{"class":512},"sMK4o",[502,514,515],{"class":508},"Services",[502,517,111],{"class":512},[502,519,521],{"class":520},"s2Zo4","AddAuthEndpoints",[502,523,524],{"class":512},"\u003C",[502,526,528],{"class":527},"sBMFI","AppUser",[502,530,531],{"class":512},",",[502,533,534],{"class":527}," AppDbContext",[502,536,537],{"class":512},">(",[502,539,540],{"class":527},"o",[502,542,543],{"class":512}," =>\n",[502,545,547],{"class":504,"line":546},2,[502,548,549],{"class":512},"{\n",[502,551,553,556,558,561,564,567,571,574],{"class":504,"line":552},3,[502,554,555],{"class":508},"    o",[502,557,111],{"class":512},[502,559,560],{"class":508},"IdentityPath ",[502,562,563],{"class":512},"=",[502,565,566],{"class":512}," \"",[502,568,570],{"class":569},"sfazB","\u002Fauth\u002Fcookie",[502,572,573],{"class":512},"\"",[502,575,576],{"class":512},";\n",[502,578,580,582,584,587,589,591,594,596],{"class":504,"line":579},4,[502,581,555],{"class":508},[502,583,111],{"class":512},[502,585,586],{"class":508},"PasskeyPath ",[502,588,563],{"class":512},[502,590,566],{"class":512},[502,592,593],{"class":569},"\u002Fauth\u002Fpasskey",[502,595,573],{"class":512},[502,597,576],{"class":512},[502,599,601,603,605,608,610,614],{"class":504,"line":600},5,[502,602,555],{"class":508},[502,604,111],{"class":512},[502,606,607],{"class":508},"RequireConfirmedAccount ",[502,609,563],{"class":512},[502,611,613],{"class":612},"sfNiH"," true",[502,615,576],{"class":512},[502,617,619,621,623,625,627,630,632,634,636,638],{"class":504,"line":618},6,[502,620,555],{"class":508},[502,622,111],{"class":512},[502,624,79],{"class":508},[502,626,111],{"class":512},[502,628,629],{"class":508},"ServerDomain ",[502,631,563],{"class":512},[502,633,566],{"class":512},[502,635,328],{"class":569},[502,637,573],{"class":512},[502,639,576],{"class":512},[502,641,643,645,647,650,652,655],{"class":504,"line":642},7,[502,644,555],{"class":508},[502,646,111],{"class":512},[502,648,649],{"class":508},"ConfigureIdentity ",[502,651,563],{"class":512},[502,653,654],{"class":527}," identity",[502,656,543],{"class":512},[502,658,660],{"class":504,"line":659},8,[502,661,662],{"class":512},"    {\n",[502,664,666,669,671,674,676,679,681,685],{"class":504,"line":665},9,[502,667,668],{"class":508},"        identity",[502,670,111],{"class":512},[502,672,673],{"class":508},"Password",[502,675,111],{"class":512},[502,677,678],{"class":508},"RequiredLength ",[502,680,563],{"class":512},[502,682,684],{"class":683},"sbssI"," 10",[502,686,576],{"class":512},[502,688,690],{"class":504,"line":689},10,[502,691,692],{"class":512},"    };\n",[502,694,696,698,700,702,704,707,709,711],{"class":504,"line":695},11,[502,697,555],{"class":508},[502,699,111],{"class":512},[502,701,208],{"class":508},[502,703,111],{"class":512},[502,705,706],{"class":508},"Enabled ",[502,708,563],{"class":512},[502,710,613],{"class":612},[502,712,576],{"class":512},[502,714,716,718,720,722,724,727,729,731,734,736],{"class":504,"line":715},12,[502,717,555],{"class":508},[502,719,111],{"class":512},[502,721,208],{"class":508},[502,723,111],{"class":512},[502,725,726],{"class":508},"Path ",[502,728,563],{"class":512},[502,730,566],{"class":512},[502,732,733],{"class":569},"\u002Fauth\u002Fjwt",[502,735,573],{"class":512},[502,737,576],{"class":512},[502,739,741,743,745,747,749,752,754,757],{"class":504,"line":740},13,[502,742,555],{"class":508},[502,744,111],{"class":512},[502,746,208],{"class":508},[502,748,111],{"class":512},[502,750,751],{"class":508},"Configure ",[502,753,563],{"class":512},[502,755,756],{"class":527}," jwt",[502,758,543],{"class":512},[502,760,762],{"class":504,"line":761},14,[502,763,662],{"class":512},[502,765,767,770,772,775,777,779,782,784],{"class":504,"line":766},15,[502,768,769],{"class":508},"        jwt",[502,771,111],{"class":512},[502,773,774],{"class":508},"Issuer ",[502,776,563],{"class":512},[502,778,566],{"class":512},[502,780,781],{"class":569},"https:\u002F\u002Fexample.com",[502,783,573],{"class":512},[502,785,576],{"class":512},[502,787,789,791,793,796,798,800,802,804],{"class":504,"line":788},16,[502,790,769],{"class":508},[502,792,111],{"class":512},[502,794,795],{"class":508},"Audience ",[502,797,563],{"class":512},[502,799,566],{"class":512},[502,801,781],{"class":569},[502,803,573],{"class":512},[502,805,576],{"class":512},[502,807,809,811,813,815,817,820,822,825,827,829,832,834,837,839],{"class":504,"line":808},17,[502,810,769],{"class":508},[502,812,111],{"class":512},[502,814,463],{"class":508},[502,816,111],{"class":512},[502,818,819],{"class":508},"SymmetricKey ",[502,821,563],{"class":512},[502,823,824],{"class":508}," builder",[502,826,111],{"class":512},[502,828,23],{"class":508},[502,830,831],{"class":512},"[",[502,833,573],{"class":512},[502,835,836],{"class":569},"Jwt:SymmetricKey",[502,838,573],{"class":512},[502,840,841],{"class":512},"];\n",[502,843,845],{"class":504,"line":844},18,[502,846,692],{"class":512},[502,848,850],{"class":504,"line":849},19,[502,851,852],{"class":512},"});\n",[100,854,855,856,111],{},"For advanced stacks that skip the facade, see ",[198,857,858],{"href":43},"Composable endpoint requirements",[860,861,862],"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 pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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":498,"searchDepth":505,"depth":546,"links":864},[865,866,867,871],{"id":115,"depth":546,"text":116},{"id":278,"depth":546,"text":79},{"id":337,"depth":546,"text":74,"children":868},[869],{"id":406,"depth":552,"text":870},"SimpleJwtOptions (via Jwt.Configure)",{"id":490,"depth":546,"text":491},"Reference for AuthEndpointsOptions and nested passkey\u002FJWT settings.","md",null,{},{"icon":26},{"title":23,"description":872},"NiZenqLU6xHA8r70nBq1P5qHqbVMReWxYV4Y5YhHTDM",[880,882],{"title":18,"path":19,"stem":20,"description":881,"icon":21,"children":-1},"Wire the opinionated AuthEndpoints facade for cookie Identity and passkeys.",{"title":28,"path":29,"stem":30,"description":883,"icon":31,"children":-1},"Checklist for running AuthEndpoints safely in Production.",1785399440325]