[{"data":1,"prerenderedAt":518},["ShallowReactive",2],{"navigation":3,"\u002Fmodules\u002Fpasskeys":94,"\u002Fmodules\u002Fpasskeys-surround":513},[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":79,"body":96,"description":506,"extension":507,"links":508,"meta":509,"navigation":510,"path":80,"seo":511,"stem":81,"__hash__":512},"docs\u002F3.modules\u002F5.passkeys.md",{"type":97,"value":98,"toc":496},"minimark",[99,103,108,143,155,159,202,212,216,380,384,411,415,418,440,450,454,476,480,492],[100,101,102],"p",{},"Passkey (WebAuthn) endpoints for passwordless register\u002Flogin and managing credentials on an existing account.",[104,105,107],"h2",{"id":106},"di","DI",[109,110,115],"pre",{"className":111,"code":112,"language":113,"meta":114,"style":114},"language-cs shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","builder.Services.AddPasskeyEndpoints();\n","cs","",[116,117,118],"code",{"__ignoreMap":114},[119,120,123,127,131,134,136,140],"span",{"class":121,"line":122},"line",1,[119,124,126],{"class":125},"sTEyZ","builder",[119,128,130],{"class":129},"sMK4o",".",[119,132,133],{"class":125},"Services",[119,135,130],{"class":129},[119,137,139],{"class":138},"s2Zo4","AddPasskeyEndpoints",[119,141,142],{"class":129},"();\n",[100,144,145,146,150,151,154],{},"Facade: passkeys are ",[147,148,149],"strong",{},"enabled by default","; set ",[116,152,153],{},"Passkeys.ServerDomain"," (required in Production).",[104,156,158],{"id":157},"map","Map",[109,160,162],{"className":111,"code":161,"language":113,"meta":114,"style":114},"app.MapGroup(\"\u002Faccount\").MapPasskeyEndpoints\u003CAppUser>();\n",[116,163,164],{"__ignoreMap":114},[119,165,166,169,171,174,177,180,184,186,189,192,195,199],{"class":121,"line":122},[119,167,168],{"class":125},"app",[119,170,130],{"class":129},[119,172,173],{"class":138},"MapGroup",[119,175,176],{"class":129},"(",[119,178,179],{"class":129},"\"",[119,181,183],{"class":182},"sfazB","\u002Faccount",[119,185,179],{"class":129},[119,187,188],{"class":129},").",[119,190,191],{"class":138},"MapPasskeyEndpoints",[119,193,194],{"class":129},"\u003C",[119,196,198],{"class":197},"sBMFI","AppUser",[119,200,201],{"class":129},">();\n",[100,203,204,205,208,209,188],{},"Routes are mapped under ",[116,206,207],{},"{prefix}\u002Fpasskeys"," (facade default ",[116,210,211],{},"\u002Faccount\u002Fpasskeys",[104,213,215],{"id":214},"routes","Routes",[217,218,219,235],"table",{},[220,221,222],"thead",{},[223,224,225,229,232],"tr",{},[226,227,228],"th",{},"Method",[226,230,231],{},"Path",[226,233,234],{},"Auth \u002F extras",[236,237,238,254,271,288,302,323,337,351,365],"tbody",{},[223,239,240,246,251],{},[241,242,243],"td",{},[116,244,245],{},"POST",[241,247,248],{},[116,249,250],{},"\u002Fpasskeys\u002FcreationOptions",[241,252,253],{},"Auth + ReAuth + CSRF + rate limit",[223,255,256,260,265],{},[241,257,258],{},[116,259,245],{},[241,261,262],{},[116,263,264],{},"\u002Fpasskeys\u002FrequestOptions",[241,266,267,268],{},"CSRF + rate limit; optional ",[116,269,270],{},"?username=",[223,272,273,277,282],{},[241,274,275],{},[116,276,245],{},[241,278,279],{},[116,280,281],{},"\u002Fpasskeys\u002Fregister\u002Foptions",[241,283,284,285],{},"CSRF; body ",[116,286,287],{},"{ email }",[223,289,290,294,299],{},[241,291,292],{},[116,293,245],{},[241,295,296],{},[116,297,298],{},"\u002Fpasskeys\u002Fregister",[241,300,301],{},"CSRF; passwordless create + sign-in",[223,303,304,308,313],{},[241,305,306],{},[116,307,245],{},[241,309,310],{},[116,311,312],{},"\u002Fpasskeys\u002Flogin",[241,314,315,316,319,320],{},"CSRF; scheme via ",[116,317,318],{},"useCookies"," \u002F ",[116,321,322],{},"useSessionCookies",[223,324,325,329,334],{},[241,326,327],{},[116,328,245],{},[241,330,331],{},[116,332,333],{},"\u002Fpasskeys\u002F",[241,335,336],{},"Add passkey (auth + ReAuth + CSRF)",[223,338,339,344,348],{},[241,340,341],{},[116,342,343],{},"GET",[241,345,346],{},[116,347,333],{},[241,349,350],{},"List passkeys (auth)",[223,352,353,358,362],{},[241,354,355],{},[116,356,357],{},"PATCH",[241,359,360],{},[116,361,333],{},[241,363,364],{},"Rename (auth + ReAuth + CSRF)",[223,366,367,372,377],{},[241,368,369],{},[116,370,371],{},"DELETE",[241,373,374],{},[116,375,376],{},"\u002Fpasskeys\u002F{credentialIdUrl}",[241,378,379],{},"Remove (auth + ReAuth + CSRF)",[104,381,383],{"id":382},"passwordless-register-flow","Passwordless register flow",[385,386,387,397,403],"ol",{},[388,389,390,393,394],"li",{},[116,391,392],{},"POST \u002Faccount\u002Fpasskeys\u002Fregister\u002Foptions"," with ",[116,395,396],{},"{ \"email\": \"...\" }",[388,398,399,400],{},"Browser ",[116,401,402],{},"navigator.credentials.create(...)",[388,404,405,393,408],{},[116,406,407],{},"POST \u002Faccount\u002Fpasskeys\u002Fregister",[116,409,410],{},"{ \"email\": \"...\", \"credentialJson\": \"...\" }",[104,412,414],{"id":413},"sign-in-scheme","Sign-in scheme",[100,416,417],{},"After register\u002Flogin:",[419,420,421,427,433],"ul",{},[388,422,423,426],{},[116,424,425],{},"?useCookies=true"," → persistent application cookie",[388,428,429,432],{},[116,430,431],{},"?useSessionCookies=true"," → session application cookie",[388,434,435,436,439],{},"neither → Identity bearer token (",[116,437,438],{},"AccessTokenResponse",")",[100,441,442,445,446,449],{},[147,443,444],{},"JWT is not issued"," — call JWT ",[116,447,448],{},"\u002Fcreate"," separately if your host uses JWT.",[104,451,453],{"id":452},"constraints","Constraints",[419,455,456,470,473],{},[388,457,458,459,393,462,465,466,469],{},"Passwordless register needs ",[116,460,461],{},"IdentityUser",[116,463,464],{},"string"," or ",[116,467,468],{},"Guid"," key.",[388,471,472],{},"CSRF is required for WebAuthn ceremonies.",[388,474,475],{},"Sensitive credential mutations require ReAuth.",[104,477,479],{"id":478},"related","Related",[419,481,482,487],{},[388,483,484],{},[485,486,84],"a",{"href":85},[388,488,489],{},[485,490,23],{"href":491},"\u002Fgetting-started\u002Fconfiguration#passkeys",[493,494,495],"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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":114,"searchDepth":122,"depth":497,"links":498},2,[499,500,501,502,503,504,505],{"id":106,"depth":497,"text":107},{"id":157,"depth":497,"text":158},{"id":214,"depth":497,"text":215},{"id":382,"depth":497,"text":383},{"id":413,"depth":497,"text":414},{"id":452,"depth":497,"text":453},{"id":478,"depth":497,"text":479},"WebAuthn passwordless register\u002Flogin and credential management endpoints.","md",null,{},{"icon":82},{"title":79,"description":506},"M6-K1sV4DaD3886dk_jVuMkU3v0hRLCtOF0O_B_grH8",[514,516],{"title":74,"path":75,"stem":76,"description":515,"icon":77,"children":-1},"JWT access tokens with an HttpOnly refresh cookie, hashed storage, and reuse detection.",{"title":84,"path":85,"stem":86,"description":517,"icon":87,"children":-1},"Step-up reauthentication for sensitive manage and passkey actions.",1785399440326]