使用 Logto 構建 ASP.NET Core 認證
學習如何藉由整合 Logto SDK 來構建 ASP.NET Core 的用戶認證流程。
介紹
- Logto 是一種現代化的 Auth0 替代方案,讓客戶身份基礎設施的構建變得更加輕鬆。它支持多種登錄方法,包括用戶名、電子郵件、電話號碼和熱門社交登錄,如 Google 和 GitHub。
- ASP.NET Core 是一個跨平台、高性能的開源框架,用於構建現代化的雲端互聯網應用程序。
在本教程中,我們將向你展示如何藉由整合 Logto SDK 來構建 ASP.NET Core 的用戶認證流程。教程使用 C# 作為編程語言。
先決條件
在開始之前,請確保你具備以下條件:
- 擁有 Logto 帳戶。如果你還沒有,可以免費註冊。
- 擁有 .NET 開發環境和 ASP.NET Core 項目。如果你還沒有,可以下載 .NET 並按照 ASP.NET 教程 設置你的項目。
創建 Logto 應用程序
首先,創建一個 Logto 應用程序,選擇 "傳統網頁" 類型。如需創建 Logto 應用程序,請按照以下步驟操作:
- 登錄到 Logto 控制台。
- 在左側導航欄中,點擊 Applications。
- 點擊 Create application。
- 在打開的頁面中,找到 "Traditional web app" 部分並找到 "ASP.NET Core" 卡 片。
- 點擊 Start building,並輸入你的應用程序名稱。
- 點擊 Create。
然後,你應該會看到一個互動教程,指導你完成和你的 ASP.NET Core 應用程序整合 Logto SDK 的過程。以下內容可供將來參考。
整合 Logto SDK
安裝
注意,ASP.NET Core 的最低支持版本是 6.0
。
添加 Logto 認證中介軟件
打開 Startup.cs
(或 Program.cs
),並添加以下代碼來註冊 Logto 認證中介軟件:
AddLogtoAuthentication
方法將完成以下操作:
- 將默認認證方案設置為
LogtoDefaults.CookieScheme
。 - 將默認挑戰方案設置為
LogtoDefaults.AuthenticationScheme
。 - 將默認登出方案設置為
LogtoDefaults.AuthenticationScheme
。 - 為認證方案添加 cookie 和 OpenID Connect 認證處理程序。
登錄
將以下 URI 添加到 Logto 應用程序詳情頁面的 Redirect URIs
列表:
要使用 Logto 登錄,你可以使用 ChallengeAsync
方法:
ChallengeAsync
方法將用戶重定向到 Logto 登錄頁面。
RedirectUri
屬性用於在認證後將用戶重定向回你的網頁應用程序。注意,這與你在 Logto 應用程序詳情頁面配置的重定向 URI 是不同的:
- Logto 應用程序詳情頁面的重定向 URI 是用戶登錄後,Logto 將用戶重定向回的 URI。
RedirectUri
屬性是 Logto 認證中介軟件中完成必要操作後,將被重定向的 URI。
操作順序為 1 -> 2。為清晰起見,我們將 Logto 應用程序詳情頁面的重定向 URI 稱為 Logto 重定向 URI,而 RedirectUri
屬性則稱為 應用程序重定向 URI。
Logto 重定向 URI 的默認值為 /Callback
,如果沒有特別要求,可以保持不變。如果你想更改,可以為 LogtoOptions
設置 CallbackPath
屬性:
請記得在 Logto 應用程序詳情頁面中相應更新。
登出
將以下 URI 添加到 Logto 應用程序詳情頁面的 Post sign-out redirect URIs
列表:
要使用 Logto 登出,你可以使用 SignOutAsync
方法:
SignOutAsync
方法將清除認證 cookie 並將用戶重定向到 Logto 登出頁面。
RedirectUri
屬性用於在登出後將用戶重定向回你的網頁應用程序。注意,這與你在 Logto 應用程序詳情頁面配置的登出後重定向 URI 是不同的:
- Logto 應用程序詳情頁面的登出後重定向 URI 是用戶登出後,Logto 將用戶重定向回的 URI。
RedirectUri
屬性是 Logto 認證中介軟件中完成必要操作後,將被重定向的 URI。
操作順序為 1 -> 2。為清晰起見,我們將 Logto 應用程序詳情頁面的登出後重定向 URI 稱為 Logto 登出後重定向 URI,而 RedirectUri
屬性則稱為 應用程序登出後重定向 URI。
Logto 登出後重定向 URI 的默認值為 /SignedOutCallback
,如果沒有特別要求,可以保持不變。如果你想更改,可以為 LogtoOptions
設置 SignedOutCallbackPath
屬性:
請記得在 Logto 應用程序詳情頁面中相應更新。
實現登錄/登出按鈕(Razor Pages)
首先,將處理程序方法添加到你的 PageModel
,例如:
然後,將按鈕添加到你的 Razor 頁面(html):
<p>已認證:@User.Identity?.IsAuthenticated</p>
<form method="post">
@if (User.Identity?.IsAuthenticated == true)
{
<button type="submit" asp-page-handler="SignOut">登出</button>
} else {
<button type="submit" asp-page-handler="SignIn">登錄</button>
}
</form>
如果用戶未認證,將顯示 "登錄" 按鈕,如果用戶已認證,將顯示 "登出" 按鈕。
檢查點:運行網頁應用程序
現在你可以運行網頁應用程序,並嘗試使用 Logto 登錄/登出:
- 在你的瀏覽器中打開網頁應用程序,你應該會看到 "已認證:False" 和 "登錄" 按鈕。
- 點擊 "登錄" 按鈕,你應該會被重定向到 Logto 登錄頁。
- 完成登錄後,你應該會被重定向回網頁應用程序,並看到 "已認證:True" 和 "登出" 按鈕。
- 點擊 "登出" 按鈕,你應該會被重定向到 Logto 登出頁,然後重定向回網頁應用程序。
如果在整合過程中遇到任何問題,請隨時通過電郵 [email protected] 聯繫我們或加入我們的 Discord 伺服器!