在 Next.js 中實現 WebAuthn:一個實踐指南
在 Next.js 中實現 WebAuthn 的實踐指南,附有即時程式碼範例。
在 Next.js 中實現 WebAuthn 的實踐指南,附有即時程式碼範例。
歡迎回到我們的 WebAuthn 系列。在我們之前的文章中,我們已經講解了 WebAuthn 的基礎知識,以及 入門指南。如果你是新加入的讀者,歡迎查看這些基礎內容以便掌握進度。
今天,我們將捲起袖子,把理論付諸實踐。我們將利用 Next.js 的新功能 “Server Actions”。我們的目標是什麼呢?就是在 Next.js 應用中實現 WebAuthn,並讓自己準備好使用 WebAuthn。
在我們深入編碼之前,先讓你瞥一眼旅程的終點——一個功能完整的 示範網站。探索一下這個網站以查看 WebAuthn 的應用情況,並體驗一下你將會構建的內容。在這個示範網站中,你可以註冊新用戶並用剛註冊的密碼登入。

對於那些喜歡手中有地圖的人,我們也提供幫助!我們將討論的所有代碼都可以在一個公開的 GitHub 存儲庫 中找到。這個存儲庫是你的伴隨指南,提供我們實現的完整源代碼。
準備好踏上這段令人興奮的冒險了嗎?讓我們開始吧!
開始之前,讓我們確保我們擁有一切所需:
@simplewebauthn/browser、@simplewebauthn/server 和 @simplewebauthn/typescript-types。現在,手持工具和材料,我們準備開始構建。
無論在生產環境還是本地開發中初始化 KV 存儲都很容易,請按照這個指南將 KV 存儲連接到你的專案並拉取環境值:https://vercel.com/docs/storage/vercel-kv/quickstart
我們導出了 2 個功能:
getCurrentSession:使用 Next.js 的 cookie 幫助創建當前請求的會話,並返回該值。updateCurrentSession:將數據保存到當前會話。與我們的會話實現類似,讓我們實現一個簡單的用戶數據庫。
我們創建了按郵件查找用戶的函數,並按郵件更新用戶數據。記住,這只是演示,在真實產品中,用戶數據通常保存在數據庫中。
在我們繼續之前,讓我們看看註冊和認證流程的圖表:
如你所見,我們需要準備兩個功能:
generateWebAuthnRegistrationOptionsverifyWebAuthnRegistration與註冊類似,登錄也需要兩個功能:
generateWebAuthnLoginOptionsverifyWebAuthnLogin這裏是代碼:
我們已經完成了準備工作,讓我們構建頁面:
恭喜你,透過實施 WebAuthn 在 Next.js 應用中的複雜過程初探!在總結時,重要的是要說明一些關鍵考慮因素,以將其部署到生產環境中。
用戶ID或用戶名**。感謝你參加我們這次的教育冒險。即使在這個最小化的範例中,集成 WebAuthn 也不是一件簡單的事情,還有另一個選擇,嘗試 WebAuthn 在 Logto 的 MFA 中的應用: