[{"data":1,"prerenderedAt":1408},["ShallowReactive",2],{"navigation":3,"\u002Fmodules\u002Fconfiguration":203,"\u002Fmodules\u002Fconfiguration-surround":1403},[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":1396,"extension":1397,"links":1398,"meta":1399,"navigation":1400,"path":159,"seo":1401,"stem":160,"__hash__":1402},"docs\u002F4.modules\u002F09.configuration.md",{"type":206,"value":207,"toc":1385},"minimark",[208,221,226,454,457,463,513,517,522,582,585,621,624,674,677,682,686,691,751,760,763,825,836,839,849,890,901,904,1009,1013,1375,1381],[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":42},[222,683,685],{"id":684},"jwt","JWT",[209,687,688,462],{},[213,689,690],{},"AuthEndpointsJwtOptions",[227,692,693,703],{},[230,694,695],{},[233,696,697,699,701],{},[236,698,238],{},[236,700,241],{},[236,702,244],{},[246,704,705,719,734],{},[233,706,707,711,716],{},[251,708,709],{},[213,710,483],{},[251,712,713],{},[213,714,715],{},"false",[251,717,718],{},"When true, registers and maps JWT endpoints",[233,720,721,726,731],{},[251,722,723],{},[213,724,725],{},"Path",[251,727,728],{},[213,729,730],{},"\u002Fauth",[251,732,733],{},"Route prefix for JWT endpoints",[233,735,736,741,745],{},[251,737,738],{},[213,739,740],{},"Configure",[251,742,743],{},[213,744,407],{},[251,746,410,747,750],{},[213,748,749],{},"Action\u003CSimpleJwtOptions>"," for issuer, audience, signing, lifetimes",[752,753,755,756,759],"h3",{"id":754},"simplejwtoptions-via-jwtconfigure","SimpleJwtOptions (via ",[213,757,758],{},"Jwt.Configure",")",[209,761,762],{},"Common settings:",[227,764,765,774],{},[230,766,767],{},[233,768,769,771],{},[236,770,238],{},[236,772,773],{},"Notes",[246,775,776,795,805,815],{},[233,777,778,787],{},[251,779,780,783,784],{},[213,781,782],{},"Issuer"," \u002F ",[213,785,786],{},"Audience",[251,788,789,790,783,792,759],{},"Production rejects the library defaults (",[213,791,366],{},[213,793,794],{},"JwtAudience",[233,796,797,802],{},[251,798,799],{},[213,800,801],{},"AccessTokenLifetime",[251,803,804],{},"Default 15 minutes",[233,806,807,812],{},[251,808,809],{},[213,810,811],{},"SigningOptions",[251,813,814],{},"Symmetric (key ≥ 32 UTF-8 bytes), RSA, ECDSA, or X509",[233,816,817,822],{},[251,818,819],{},[213,820,821],{},"TokenValidationParameters",[251,823,824],{},"Optional override of validation parameters",[209,826,827,828,831,832,835],{},"When JWT is enabled, call ",[213,829,830],{},"modelBuilder.UseRefreshToken()"," on your ",[213,833,834],{},"DbContext"," and migrate.",[222,837,382],{"id":838},"reauth",[209,840,841,844,845,848],{},[213,842,843],{},"AuthEndpointsReAuthOptions"," (",[213,846,847],{},"o.ReAuth","):",[227,850,851,861],{},[230,852,853],{},[233,854,855,857,859],{},[236,856,238],{},[236,858,241],{},[236,860,244],{},[246,862,863],{},[233,864,865,870,872],{},[251,866,867],{},[213,868,869],{},"Lifetime",[251,871,385],{},[251,873,874,875,878,879,882,883,885,886,889],{},"Cookie ",[213,876,877],{},"ExpireTimeSpan",", ticket ",[213,880,881],{},"ExpiresUtc",", and header ",[213,884,394],{}," expiry for the same confirm. Non-persistent (",[213,887,888],{},"IsPersistent = false","). No sliding expiration.",[209,891,892,893,896,897,900],{},"Startup validation rejects ",[213,894,895],{},"\u003C= 0",", ",[213,898,899],{},"InfiniteTimeSpan",", values under 1 minute, and values over 60 minutes.",[209,902,903],{},"Composable hosts that skip the facade configure the same type:",[905,906,911],"pre",{"className":907,"code":908,"language":909,"meta":910,"style":910},"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,912,913,948,954,986,992],{"__ignoreMap":910},[914,915,918,922,925,928,930,933,936,939,942,945],"span",{"class":916,"line":917},"line",1,[914,919,921],{"class":920},"sTEyZ","builder",[914,923,220],{"class":924},"sMK4o",[914,926,927],{"class":920},"Services",[914,929,220],{"class":924},[914,931,740],{"class":932},"s2Zo4",[914,934,935],{"class":924},"\u003C",[914,937,843],{"class":938},"sBMFI",[914,940,941],{"class":924},">(",[914,943,944],{"class":938},"o",[914,946,947],{"class":924}," =>\n",[914,949,951],{"class":916,"line":950},2,[914,952,953],{"class":924},"{\n",[914,955,957,960,962,965,968,971,973,976,979,983],{"class":916,"line":956},3,[914,958,959],{"class":920},"    o",[914,961,220],{"class":924},[914,963,964],{"class":920},"Lifetime ",[914,966,967],{"class":924},"=",[914,969,970],{"class":920}," TimeSpan",[914,972,220],{"class":924},[914,974,975],{"class":932},"FromMinutes",[914,977,978],{"class":924},"(",[914,980,982],{"class":981},"sbssI","2",[914,984,985],{"class":924},");\n",[914,987,989],{"class":916,"line":988},4,[914,990,991],{"class":924},"});\n",[914,993,995,997,999,1001,1003,1006],{"class":916,"line":994},5,[914,996,921],{"class":920},[914,998,220],{"class":924},[914,1000,927],{"class":920},[914,1002,220],{"class":924},[914,1004,1005],{"class":932},"AddCookieAuthEndpoints",[914,1007,1008],{"class":924},"();\n",[222,1010,1012],{"id":1011},"example","Example",[905,1014,1016],{"className":907,"code":1015,"language":909,"meta":910,"style":910},"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,1017,1018,1047,1051,1075,1095,1112,1136,1153,1159,1182,1188,1215,1235,1260,1281,1286,1308,1328,1365,1370],{"__ignoreMap":910},[914,1019,1020,1022,1024,1026,1028,1030,1032,1035,1038,1041,1043,1045],{"class":916,"line":917},[914,1021,921],{"class":920},[914,1023,220],{"class":924},[914,1025,927],{"class":920},[914,1027,220],{"class":924},[914,1029,291],{"class":932},[914,1031,935],{"class":924},[914,1033,1034],{"class":938},"AppUser",[914,1036,1037],{"class":924},",",[914,1039,1040],{"class":938}," AppDbContext",[914,1042,941],{"class":924},[914,1044,944],{"class":938},[914,1046,947],{"class":924},[914,1048,1049],{"class":916,"line":950},[914,1050,953],{"class":924},[914,1052,1053,1055,1057,1060,1062,1065,1069,1072],{"class":916,"line":956},[914,1054,959],{"class":920},[914,1056,220],{"class":924},[914,1058,1059],{"class":920},"IdentityPath ",[914,1061,967],{"class":924},[914,1063,1064],{"class":924}," \"",[914,1066,1068],{"class":1067},"sfazB","\u002Fauth\u002Fcookie",[914,1070,1071],{"class":924},"\"",[914,1073,1074],{"class":924},";\n",[914,1076,1077,1079,1081,1084,1086,1088,1091,1093],{"class":916,"line":988},[914,1078,959],{"class":920},[914,1080,220],{"class":924},[914,1082,1083],{"class":920},"PasskeyPath ",[914,1085,967],{"class":924},[914,1087,1064],{"class":924},[914,1089,1090],{"class":1067},"\u002Fauth\u002Fpasskey",[914,1092,1071],{"class":924},[914,1094,1074],{"class":924},[914,1096,1097,1099,1101,1104,1106,1110],{"class":916,"line":994},[914,1098,959],{"class":920},[914,1100,220],{"class":924},[914,1102,1103],{"class":920},"RequireConfirmedAccount ",[914,1105,967],{"class":924},[914,1107,1109],{"class":1108},"sfNiH"," true",[914,1111,1074],{"class":924},[914,1113,1115,1117,1119,1121,1123,1126,1128,1130,1132,1134],{"class":916,"line":1114},6,[914,1116,959],{"class":920},[914,1118,220],{"class":924},[914,1120,332],{"class":920},[914,1122,220],{"class":924},[914,1124,1125],{"class":920},"ServerDomain ",[914,1127,967],{"class":924},[914,1129,1064],{"class":924},[914,1131,506],{"class":1067},[914,1133,1071],{"class":924},[914,1135,1074],{"class":924},[914,1137,1139,1141,1143,1146,1148,1151],{"class":916,"line":1138},7,[914,1140,959],{"class":920},[914,1142,220],{"class":924},[914,1144,1145],{"class":920},"ConfigureIdentity ",[914,1147,967],{"class":924},[914,1149,1150],{"class":938}," identity",[914,1152,947],{"class":924},[914,1154,1156],{"class":916,"line":1155},8,[914,1157,1158],{"class":924},"    {\n",[914,1160,1162,1165,1167,1170,1172,1175,1177,1180],{"class":916,"line":1161},9,[914,1163,1164],{"class":920},"        identity",[914,1166,220],{"class":924},[914,1168,1169],{"class":920},"Password",[914,1171,220],{"class":924},[914,1173,1174],{"class":920},"RequiredLength ",[914,1176,967],{"class":924},[914,1178,1179],{"class":981}," 10",[914,1181,1074],{"class":924},[914,1183,1185],{"class":916,"line":1184},10,[914,1186,1187],{"class":924},"    };\n",[914,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213],{"class":916,"line":1190},11,[914,1192,959],{"class":920},[914,1194,220],{"class":924},[914,1196,382],{"class":920},[914,1198,220],{"class":924},[914,1200,964],{"class":920},[914,1202,967],{"class":924},[914,1204,970],{"class":920},[914,1206,220],{"class":924},[914,1208,975],{"class":932},[914,1210,978],{"class":924},[914,1212,982],{"class":981},[914,1214,985],{"class":924},[914,1216,1218,1220,1222,1224,1226,1229,1231,1233],{"class":916,"line":1217},12,[914,1219,959],{"class":920},[914,1221,220],{"class":924},[914,1223,366],{"class":920},[914,1225,220],{"class":924},[914,1227,1228],{"class":920},"Enabled ",[914,1230,967],{"class":924},[914,1232,1109],{"class":1108},[914,1234,1074],{"class":924},[914,1236,1238,1240,1242,1244,1246,1249,1251,1253,1256,1258],{"class":916,"line":1237},13,[914,1239,959],{"class":920},[914,1241,220],{"class":924},[914,1243,366],{"class":920},[914,1245,220],{"class":924},[914,1247,1248],{"class":920},"Path ",[914,1250,967],{"class":924},[914,1252,1064],{"class":924},[914,1254,1255],{"class":1067},"\u002Fauth\u002Fjwt",[914,1257,1071],{"class":924},[914,1259,1074],{"class":924},[914,1261,1263,1265,1267,1269,1271,1274,1276,1279],{"class":916,"line":1262},14,[914,1264,959],{"class":920},[914,1266,220],{"class":924},[914,1268,366],{"class":920},[914,1270,220],{"class":924},[914,1272,1273],{"class":920},"Configure ",[914,1275,967],{"class":924},[914,1277,1278],{"class":938}," jwt",[914,1280,947],{"class":924},[914,1282,1284],{"class":916,"line":1283},15,[914,1285,1158],{"class":924},[914,1287,1289,1292,1294,1297,1299,1301,1304,1306],{"class":916,"line":1288},16,[914,1290,1291],{"class":920},"        jwt",[914,1293,220],{"class":924},[914,1295,1296],{"class":920},"Issuer ",[914,1298,967],{"class":924},[914,1300,1064],{"class":924},[914,1302,1303],{"class":1067},"https:\u002F\u002Fexample.com",[914,1305,1071],{"class":924},[914,1307,1074],{"class":924},[914,1309,1311,1313,1315,1318,1320,1322,1324,1326],{"class":916,"line":1310},17,[914,1312,1291],{"class":920},[914,1314,220],{"class":924},[914,1316,1317],{"class":920},"Audience ",[914,1319,967],{"class":924},[914,1321,1064],{"class":924},[914,1323,1303],{"class":1067},[914,1325,1071],{"class":924},[914,1327,1074],{"class":924},[914,1329,1331,1333,1335,1337,1339,1342,1344,1347,1349,1352,1355,1357,1360,1362],{"class":916,"line":1330},18,[914,1332,1291],{"class":920},[914,1334,220],{"class":924},[914,1336,811],{"class":920},[914,1338,220],{"class":924},[914,1340,1341],{"class":920},"SymmetricKey ",[914,1343,967],{"class":924},[914,1345,1346],{"class":920}," builder",[914,1348,220],{"class":924},[914,1350,1351],{"class":920},"Configuration",[914,1353,1354],{"class":924},"[",[914,1356,1071],{"class":924},[914,1358,1359],{"class":1067},"Jwt:SymmetricKey",[914,1361,1071],{"class":924},[914,1363,1364],{"class":924},"];\n",[914,1366,1368],{"class":916,"line":1367},19,[914,1369,1187],{"class":924},[914,1371,1373],{"class":916,"line":1372},20,[914,1374,991],{"class":924},[209,1376,1377,1378,220],{},"For advanced stacks that skip the facade, see ",[340,1379,1380],{"href":106},"Composable endpoint requirements",[1382,1383,1384],"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":910,"searchDepth":917,"depth":950,"links":1386},[1387,1388,1389,1390,1394,1395],{"id":224,"depth":950,"text":225},{"id":456,"depth":950,"text":332},{"id":515,"depth":950,"text":516},{"id":684,"depth":950,"text":685,"children":1391},[1392],{"id":754,"depth":956,"text":1393},"SimpleJwtOptions (via Jwt.Configure)",{"id":838,"depth":950,"text":382},{"id":1011,"depth":950,"text":1012},"Reference for AuthEndpointsOptions and nested passkey, JWT, ReAuth, and email confirmation settings.","md",null,{},{"icon":161},{"title":158,"description":1396},"Af_La0nm8vOylM7IjLxvccWhvN0NMPbpa_MpN03Tg9A",[1404,1406],{"title":154,"path":155,"stem":156,"description":1405,"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":1407,"icon":84,"children":-1},"Which AuthEndpoints routes require an antiforgery token, when the check is skipped, and what a failure returns.",1791096172364]