[{"data":1,"prerenderedAt":1410},["ShallowReactive",2],{"navigation":3,"\u002Fmodules\u002Fconfiguration":203,"\u002Fmodules\u002Fconfiguration-surround":1405},[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":158,"body":205,"description":1398,"extension":1399,"links":1400,"meta":1401,"navigation":1402,"path":159,"seo":1403,"stem":160,"__hash__":1404},"docs\u002F4.modules\u002F09.configuration.md",{"type":206,"value":207,"toc":1387},"minimark",[208,221,226,454,457,463,513,517,522,582,585,621,624,674,677,683,687,692,752,761,764,826,837,840,850,891,902,905,1010,1014,1376,1383],[209,210,211,212,216,217,220],"p",{},"Configure the facade via ",[213,214,215],"code",{},"AddAuthEndpoints\u003CTUser, TContext>(…)"," or, with roles, ",[213,218,219],{},"AddAuthEndpoints\u003CTUser, TRole, TContext>(…)",".",[222,223,225],"h2",{"id":224},"authendpointsoptions","AuthEndpointsOptions",[227,228,229,245],"table",{},[230,231,232],"thead",{},[233,234,235,239,242],"tr",{},[236,237,238],"th",{},"Property",[236,240,241],{},"Default",[236,243,244],{},"Description",[246,247,248,264,296,311,326,344,360,376,396,415,436],"tbody",{},[233,249,250,256,261],{},[251,252,253],"td",{},[213,254,255],{},"IdentityPath",[251,257,258],{},[213,259,260],{},"\u002Fidentity",[251,262,263],{},"Route prefix for Identity management plus the configured sign-in stack",[233,265,266,271,276],{},[251,267,268],{},[213,269,270],{},"SignIn",[251,272,273],{},[213,274,275],{},"Cookie",[251,277,278,281,282,285,286,288,289,292,293,220],{},[213,279,280],{},"AuthEndpointsSignIn.Cookie"," or ",[213,283,284],{},"IdentityBearer",". Pass ",[213,287,284],{}," as the first argument to ",[213,290,291],{},"AddAuthEndpoints",", or set ",[213,294,295],{},"o.SignIn",[233,297,298,303,308],{},[251,299,300],{},[213,301,302],{},"PasskeyPath",[251,304,305],{},[213,306,307],{},"\u002Faccount",[251,309,310],{},"Route prefix for passkey endpoints",[233,312,313,318,323],{},[251,314,315],{},[213,316,317],{},"RequireConfirmedAccount",[251,319,320],{},[213,321,322],{},"true",[251,324,325],{},"Identity requires a confirmed account before sign-in",[233,327,328,333,336],{},[251,329,330],{},[213,331,332],{},"Passkeys",[251,334,335],{},"(enabled)",[251,337,338,339],{},"Nested ",[340,341,343],"a",{"href":342},"#passkeys","passkey options",[233,345,346,351,354],{},[251,347,348],{},[213,349,350],{},"EmailConfirmation",[251,352,353],{},"(unset)",[251,355,338,356],{},[340,357,359],{"href":358},"#email-confirmation","email confirmation",[233,361,362,367,370],{},[251,363,364],{},[213,365,366],{},"Jwt",[251,368,369],{},"(disabled)",[251,371,338,372],{},[340,373,375],{"href":374},"#jwt","JWT options",[233,377,378,383,386],{},[251,379,380],{},[213,381,382],{},"ReAuth",[251,384,385],{},"5 minutes",[251,387,338,388,391,392,395],{},[340,389,382],{"href":390},"#reauth"," cookie and ",[213,393,394],{},"reauthToken"," lifetime",[233,397,398,403,408],{},[251,399,400],{},[213,401,402],{},"ConfigureIdentity",[251,404,405],{},[213,406,407],{},"null",[251,409,410,411,414],{},"Optional ",[213,412,413],{},"Action\u003CIdentityOptions>"," applied after secure defaults",[233,416,417,422,426],{},[251,418,419],{},[213,420,421],{},"ConfigurePasskeys",[251,423,424],{},[213,425,407],{},[251,427,410,428,431,432,435],{},[213,429,430],{},"Action\u003CIdentityPasskeyOptions>"," after ",[213,433,434],{},"ServerDomain"," is applied",[233,437,438,443,447],{},[251,439,440],{},[213,441,442],{},"RequireEmailSenderInProduction",[251,444,445],{},[213,446,322],{},[251,448,449,450,453],{},"Production must register a real ",[213,451,452],{},"IEmailSender\u003CTUser>"," (not Identity's no-op)",[222,455,332],{"id":456},"passkeys",[209,458,459,462],{},[213,460,461],{},"AuthEndpointsPasskeyOptions",":",[227,464,465,475],{},[230,466,467],{},[233,468,469,471,473],{},[236,470,238],{},[236,472,241],{},[236,474,244],{},[246,476,477,491],{},[233,478,479,484,488],{},[251,480,481],{},[213,482,483],{},"Enabled",[251,485,486],{},[213,487,322],{},[251,489,490],{},"When false, passkey DI and mapping are skipped",[233,492,493,497,501],{},[251,494,495],{},[213,496,434],{},[251,498,499],{},[213,500,407],{},[251,502,503,504,507,508,512],{},"WebAuthn relying-party domain (e.g. ",[213,505,506],{},"example.com","). ",[509,510,511],"strong",{},"Required in Production"," when enabled",[222,514,516],{"id":515},"email-confirmation","Email confirmation",[209,518,519,462],{},[213,520,521],{},"AuthEndpointsEmailConfirmationOptions",[227,523,524,534],{},[230,525,526],{},[233,527,528,530,532],{},[236,529,238],{},[236,531,241],{},[236,533,244],{},[246,535,536,565],{},[233,537,538,543,547],{},[251,539,540],{},[213,541,542],{},"ConfirmEmailRedirectUri",[251,544,545],{},[213,546,407],{},[251,548,549,550,553,554,557,558,561,562,220],{},"After browser ",[213,551,552],{},"GET"," confirm-email, redirect here instead of the plain-text \u002F 401 response. Absolute ",[213,555,556],{},"https:\u002F\u002F"," (or ",[213,559,560],{},"http:\u002F\u002F"," in Development), or a rooted path such as ",[213,563,564],{},"\u002Fauth\u002Femail-confirmed",[233,566,567,572,575],{},[251,568,569],{},[213,570,571],{},"AllowedRedirectOrigins",[251,573,574],{},"empty",[251,576,577,578,581],{},"Origins such as ",[213,579,580],{},"https:\u002F\u002Fapp.example.com"," required when the redirect URI is absolute. A rooted path does not need an entry.",[209,583,584],{},"URI rules:",[586,587,588,596,607,610,613],"ul",{},[589,590,591,592,595],"li",{},"Protocol-relative (",[213,593,594],{},"\u002F\u002F…",") and non-http(s) schemes are rejected.",[589,597,598,599,602,603,606],{},"A rooted path is resolved against the request public origin (",[213,600,601],{},"scheme:\u002F\u002Fhost",", including port). ",[213,604,605],{},"PathBase"," is not included.",[589,608,609],{},"An absolute URI must match an allowlist entry on scheme, host, and optional port (origin only).",[589,611,612],{},"Absolute URI plus an empty allowlist is refused at request time. Production also fails options validation.",[589,614,615,616,618,619,220],{},"Absolute ",[213,617,560],{}," is refused unless the host is Development. Production fails options validation for ",[213,620,560],{},[209,622,623],{},"Every redirect overwrites (does not append) these query parameters:",[227,625,626,636],{},[230,627,628],{},[233,629,630,633],{},[236,631,632],{},"Name",[236,634,635],{},"Values",[246,637,638,653],{},[233,639,640,645],{},[251,641,642],{},[213,643,644],{},"status",[251,646,647,281,650],{},[213,648,649],{},"confirmed",[213,651,652],{},"failed",[233,654,655,660],{},[251,656,657],{},[213,658,659],{},"flow",[251,661,662,665,666,669,670,673],{},[213,663,664],{},"confirm"," when ",[213,667,668],{},"changedEmail"," is absent; ",[213,671,672],{},"change-email"," when it is present",[209,675,676],{},"The redirect query does not include tokens, user ids, or emails.",[209,678,679,680,220],{},"Client steps for sign-up with email confirmation: ",[340,681,41],{"href":682},"\u002Fguides\u002Fregistration\u002F",[222,684,686],{"id":685},"jwt","JWT",[209,688,689,462],{},[213,690,691],{},"AuthEndpointsJwtOptions",[227,693,694,704],{},[230,695,696],{},[233,697,698,700,702],{},[236,699,238],{},[236,701,241],{},[236,703,244],{},[246,705,706,720,735],{},[233,707,708,712,717],{},[251,709,710],{},[213,711,483],{},[251,713,714],{},[213,715,716],{},"false",[251,718,719],{},"When true, registers and maps JWT endpoints",[233,721,722,727,732],{},[251,723,724],{},[213,725,726],{},"Path",[251,728,729],{},[213,730,731],{},"\u002Fauth",[251,733,734],{},"Route prefix for JWT endpoints",[233,736,737,742,746],{},[251,738,739],{},[213,740,741],{},"Configure",[251,743,744],{},[213,745,407],{},[251,747,410,748,751],{},[213,749,750],{},"Action\u003CSimpleJwtOptions>"," for issuer, audience, signing, lifetimes",[753,754,756,757,760],"h3",{"id":755},"simplejwtoptions-via-jwtconfigure","SimpleJwtOptions (via ",[213,758,759],{},"Jwt.Configure",")",[209,762,763],{},"Common settings:",[227,765,766,775],{},[230,767,768],{},[233,769,770,772],{},[236,771,238],{},[236,773,774],{},"Notes",[246,776,777,796,806,816],{},[233,778,779,788],{},[251,780,781,784,785],{},[213,782,783],{},"Issuer"," \u002F ",[213,786,787],{},"Audience",[251,789,790,791,784,793,760],{},"Production rejects the library defaults (",[213,792,366],{},[213,794,795],{},"JwtAudience",[233,797,798,803],{},[251,799,800],{},[213,801,802],{},"AccessTokenLifetime",[251,804,805],{},"Default 15 minutes",[233,807,808,813],{},[251,809,810],{},[213,811,812],{},"SigningOptions",[251,814,815],{},"Symmetric (key ≥ 32 UTF-8 bytes), RSA, ECDSA, or X509",[233,817,818,823],{},[251,819,820],{},[213,821,822],{},"TokenValidationParameters",[251,824,825],{},"Optional override of validation parameters",[209,827,828,829,832,833,836],{},"When JWT is enabled, call ",[213,830,831],{},"modelBuilder.UseRefreshToken()"," on your ",[213,834,835],{},"DbContext"," and migrate.",[222,838,382],{"id":839},"reauth",[209,841,842,845,846,849],{},[213,843,844],{},"AuthEndpointsReAuthOptions"," (",[213,847,848],{},"o.ReAuth","):",[227,851,852,862],{},[230,853,854],{},[233,855,856,858,860],{},[236,857,238],{},[236,859,241],{},[236,861,244],{},[246,863,864],{},[233,865,866,871,873],{},[251,867,868],{},[213,869,870],{},"Lifetime",[251,872,385],{},[251,874,875,876,879,880,883,884,886,887,890],{},"Cookie ",[213,877,878],{},"ExpireTimeSpan",", ticket ",[213,881,882],{},"ExpiresUtc",", and header ",[213,885,394],{}," expiry for the same confirm. Non-persistent (",[213,888,889],{},"IsPersistent = false","). No sliding expiration.",[209,892,893,894,897,898,901],{},"Startup validation rejects ",[213,895,896],{},"\u003C= 0",", ",[213,899,900],{},"InfiniteTimeSpan",", values under 1 minute, and values over 60 minutes.",[209,903,904],{},"Composable hosts that skip the facade configure the same type:",[906,907,912],"pre",{"className":908,"code":909,"language":910,"meta":911,"style":911},"language-cs shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","builder.Services.Configure\u003CAuthEndpointsReAuthOptions>(o =>\n{\n    o.Lifetime = TimeSpan.FromMinutes(2);\n});\nbuilder.Services.AddCookieAuthEndpoints();\n","cs","",[213,913,914,949,955,987,993],{"__ignoreMap":911},[915,916,919,923,926,929,931,934,937,940,943,946],"span",{"class":917,"line":918},"line",1,[915,920,922],{"class":921},"sTEyZ","builder",[915,924,220],{"class":925},"sMK4o",[915,927,928],{"class":921},"Services",[915,930,220],{"class":925},[915,932,741],{"class":933},"s2Zo4",[915,935,936],{"class":925},"\u003C",[915,938,844],{"class":939},"sBMFI",[915,941,942],{"class":925},">(",[915,944,945],{"class":939},"o",[915,947,948],{"class":925}," =>\n",[915,950,952],{"class":917,"line":951},2,[915,953,954],{"class":925},"{\n",[915,956,958,961,963,966,969,972,974,977,980,984],{"class":917,"line":957},3,[915,959,960],{"class":921},"    o",[915,962,220],{"class":925},[915,964,965],{"class":921},"Lifetime ",[915,967,968],{"class":925},"=",[915,970,971],{"class":921}," TimeSpan",[915,973,220],{"class":925},[915,975,976],{"class":933},"FromMinutes",[915,978,979],{"class":925},"(",[915,981,983],{"class":982},"sbssI","2",[915,985,986],{"class":925},");\n",[915,988,990],{"class":917,"line":989},4,[915,991,992],{"class":925},"});\n",[915,994,996,998,1000,1002,1004,1007],{"class":917,"line":995},5,[915,997,922],{"class":921},[915,999,220],{"class":925},[915,1001,928],{"class":921},[915,1003,220],{"class":925},[915,1005,1006],{"class":933},"AddCookieAuthEndpoints",[915,1008,1009],{"class":925},"();\n",[222,1011,1013],{"id":1012},"example","Example",[906,1015,1017],{"className":908,"code":1016,"language":910,"meta":911,"style":911},"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.ReAuth.Lifetime = TimeSpan.FromMinutes(2);\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",[213,1018,1019,1048,1052,1076,1096,1113,1137,1154,1160,1183,1189,1216,1236,1261,1282,1287,1309,1329,1366,1371],{"__ignoreMap":911},[915,1020,1021,1023,1025,1027,1029,1031,1033,1036,1039,1042,1044,1046],{"class":917,"line":918},[915,1022,922],{"class":921},[915,1024,220],{"class":925},[915,1026,928],{"class":921},[915,1028,220],{"class":925},[915,1030,291],{"class":933},[915,1032,936],{"class":925},[915,1034,1035],{"class":939},"AppUser",[915,1037,1038],{"class":925},",",[915,1040,1041],{"class":939}," AppDbContext",[915,1043,942],{"class":925},[915,1045,945],{"class":939},[915,1047,948],{"class":925},[915,1049,1050],{"class":917,"line":951},[915,1051,954],{"class":925},[915,1053,1054,1056,1058,1061,1063,1066,1070,1073],{"class":917,"line":957},[915,1055,960],{"class":921},[915,1057,220],{"class":925},[915,1059,1060],{"class":921},"IdentityPath ",[915,1062,968],{"class":925},[915,1064,1065],{"class":925}," \"",[915,1067,1069],{"class":1068},"sfazB","\u002Fauth\u002Fcookie",[915,1071,1072],{"class":925},"\"",[915,1074,1075],{"class":925},";\n",[915,1077,1078,1080,1082,1085,1087,1089,1092,1094],{"class":917,"line":989},[915,1079,960],{"class":921},[915,1081,220],{"class":925},[915,1083,1084],{"class":921},"PasskeyPath ",[915,1086,968],{"class":925},[915,1088,1065],{"class":925},[915,1090,1091],{"class":1068},"\u002Fauth\u002Fpasskey",[915,1093,1072],{"class":925},[915,1095,1075],{"class":925},[915,1097,1098,1100,1102,1105,1107,1111],{"class":917,"line":995},[915,1099,960],{"class":921},[915,1101,220],{"class":925},[915,1103,1104],{"class":921},"RequireConfirmedAccount ",[915,1106,968],{"class":925},[915,1108,1110],{"class":1109},"sfNiH"," true",[915,1112,1075],{"class":925},[915,1114,1116,1118,1120,1122,1124,1127,1129,1131,1133,1135],{"class":917,"line":1115},6,[915,1117,960],{"class":921},[915,1119,220],{"class":925},[915,1121,332],{"class":921},[915,1123,220],{"class":925},[915,1125,1126],{"class":921},"ServerDomain ",[915,1128,968],{"class":925},[915,1130,1065],{"class":925},[915,1132,506],{"class":1068},[915,1134,1072],{"class":925},[915,1136,1075],{"class":925},[915,1138,1140,1142,1144,1147,1149,1152],{"class":917,"line":1139},7,[915,1141,960],{"class":921},[915,1143,220],{"class":925},[915,1145,1146],{"class":921},"ConfigureIdentity ",[915,1148,968],{"class":925},[915,1150,1151],{"class":939}," identity",[915,1153,948],{"class":925},[915,1155,1157],{"class":917,"line":1156},8,[915,1158,1159],{"class":925},"    {\n",[915,1161,1163,1166,1168,1171,1173,1176,1178,1181],{"class":917,"line":1162},9,[915,1164,1165],{"class":921},"        identity",[915,1167,220],{"class":925},[915,1169,1170],{"class":921},"Password",[915,1172,220],{"class":925},[915,1174,1175],{"class":921},"RequiredLength ",[915,1177,968],{"class":925},[915,1179,1180],{"class":982}," 10",[915,1182,1075],{"class":925},[915,1184,1186],{"class":917,"line":1185},10,[915,1187,1188],{"class":925},"    };\n",[915,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214],{"class":917,"line":1191},11,[915,1193,960],{"class":921},[915,1195,220],{"class":925},[915,1197,382],{"class":921},[915,1199,220],{"class":925},[915,1201,965],{"class":921},[915,1203,968],{"class":925},[915,1205,971],{"class":921},[915,1207,220],{"class":925},[915,1209,976],{"class":933},[915,1211,979],{"class":925},[915,1213,983],{"class":982},[915,1215,986],{"class":925},[915,1217,1219,1221,1223,1225,1227,1230,1232,1234],{"class":917,"line":1218},12,[915,1220,960],{"class":921},[915,1222,220],{"class":925},[915,1224,366],{"class":921},[915,1226,220],{"class":925},[915,1228,1229],{"class":921},"Enabled ",[915,1231,968],{"class":925},[915,1233,1110],{"class":1109},[915,1235,1075],{"class":925},[915,1237,1239,1241,1243,1245,1247,1250,1252,1254,1257,1259],{"class":917,"line":1238},13,[915,1240,960],{"class":921},[915,1242,220],{"class":925},[915,1244,366],{"class":921},[915,1246,220],{"class":925},[915,1248,1249],{"class":921},"Path ",[915,1251,968],{"class":925},[915,1253,1065],{"class":925},[915,1255,1256],{"class":1068},"\u002Fauth\u002Fjwt",[915,1258,1072],{"class":925},[915,1260,1075],{"class":925},[915,1262,1264,1266,1268,1270,1272,1275,1277,1280],{"class":917,"line":1263},14,[915,1265,960],{"class":921},[915,1267,220],{"class":925},[915,1269,366],{"class":921},[915,1271,220],{"class":925},[915,1273,1274],{"class":921},"Configure ",[915,1276,968],{"class":925},[915,1278,1279],{"class":939}," jwt",[915,1281,948],{"class":925},[915,1283,1285],{"class":917,"line":1284},15,[915,1286,1159],{"class":925},[915,1288,1290,1293,1295,1298,1300,1302,1305,1307],{"class":917,"line":1289},16,[915,1291,1292],{"class":921},"        jwt",[915,1294,220],{"class":925},[915,1296,1297],{"class":921},"Issuer ",[915,1299,968],{"class":925},[915,1301,1065],{"class":925},[915,1303,1304],{"class":1068},"https:\u002F\u002Fexample.com",[915,1306,1072],{"class":925},[915,1308,1075],{"class":925},[915,1310,1312,1314,1316,1319,1321,1323,1325,1327],{"class":917,"line":1311},17,[915,1313,1292],{"class":921},[915,1315,220],{"class":925},[915,1317,1318],{"class":921},"Audience ",[915,1320,968],{"class":925},[915,1322,1065],{"class":925},[915,1324,1304],{"class":1068},[915,1326,1072],{"class":925},[915,1328,1075],{"class":925},[915,1330,1332,1334,1336,1338,1340,1343,1345,1348,1350,1353,1356,1358,1361,1363],{"class":917,"line":1331},18,[915,1333,1292],{"class":921},[915,1335,220],{"class":925},[915,1337,812],{"class":921},[915,1339,220],{"class":925},[915,1341,1342],{"class":921},"SymmetricKey ",[915,1344,968],{"class":925},[915,1346,1347],{"class":921}," builder",[915,1349,220],{"class":925},[915,1351,1352],{"class":921},"Configuration",[915,1354,1355],{"class":925},"[",[915,1357,1072],{"class":925},[915,1359,1360],{"class":1068},"Jwt:SymmetricKey",[915,1362,1072],{"class":925},[915,1364,1365],{"class":925},"];\n",[915,1367,1369],{"class":917,"line":1368},19,[915,1370,1188],{"class":925},[915,1372,1374],{"class":917,"line":1373},20,[915,1375,992],{"class":925},[209,1377,1378,1379,220],{},"For advanced stacks that skip the facade, see ",[340,1380,1382],{"href":1381},"\u002Fcomposables\u002Frequirements\u002F","Composable endpoint requirements",[1384,1385,1386],"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 .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);}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}",{"title":911,"searchDepth":918,"depth":951,"links":1388},[1389,1390,1391,1392,1396,1397],{"id":224,"depth":951,"text":225},{"id":456,"depth":951,"text":332},{"id":515,"depth":951,"text":516},{"id":685,"depth":951,"text":686,"children":1393},[1394],{"id":755,"depth":957,"text":1395},"SimpleJwtOptions (via Jwt.Configure)",{"id":839,"depth":951,"text":382},{"id":1012,"depth":951,"text":1013},"Reference for AuthEndpointsOptions and nested passkey, JWT, ReAuth, and email confirmation settings.","md",null,{},{"icon":161},{"title":158,"description":1398},"L-H45U-oEmILzo47zGQ4OrlDb7M9anZrYFDQVvJ-G-s",[1406,1408],{"title":154,"path":155,"stem":156,"description":1407,"icon":49,"children":-1},"Separate preview package for GitHub and Google OAuth login with Identity cookie or JWT completion.",{"title":163,"path":164,"stem":165,"description":1409,"icon":84,"children":-1},"Which AuthEndpoints routes require an antiforgery token, when the check is skipped, and what a failure returns.",1791123628752]