使用 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 控制台。
- 在左侧导航栏中,点击 应用程序。
- 点击 创建应用程序。
- 在打开的页面中,找到「传统网页应用」部分并定位到「ASP.NET Core」卡片。
- 点击 开始构建,并输入你的应用名称。
- 点击 创建。
那么你就应该看到一个交互式教程,引导你将 Logto SDK 集成到你的 ASP.NET Core 应用中。以下内容可以作为你日后参考。
与 Logto SDK 集成
安装
注意,ASP.NET Core 的最低受支持版本是 6.0
。
添加 Logto 认证中间件
打开 Startup.cs
(或 Program.cs
),并添加以下代码以注册 Logto 认证中间件:
AddLogtoAuthentication
方法将完成以下事情:
- 将默认认证 方案设置为
LogtoDefaults.CookieScheme
。 - 将默认挑战方案设置为
LogtoDefaults.AuthenticationScheme
。 - 将默认登出方案设置为
LogtoDefaults.AuthenticationScheme
。 - 将 cookie 和 OpenID Connect 认证处理器添加到认证方案中。
登录
在 Logto 应用详细信息页面的 Redirect URIs
列表中添加以下 URI:
要用 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 应用详细信息页面的值。
登出
在 Logto 应用详细信息页面的 Post sign-out redirect URIs
列表中添加以下 URI:
要用 Logto 登出,你可以使用 SignOutAsync
方法:
SignOutAsync
方法将清除认证 cookie 并将用户重定向到 Logto 登出页面。
RedirectUri
属性用于在登出后将用户重定向回你的网络应用。注意,这与你在 Logto 应用详细信息页面中配置的 post sign-out redirect URI 是不同的:
- Logto 应用详细信息中的 post sign-out redirect URI 是用户登出后 Logto 会将用户重定向回去的 URI。
RedirectUri
属性是在 Logto 认证中间件中执行必要行动后将重定向的 URI。
行动的顺序是 1 -> 2。为了清楚,让我们把 Logto 应用详细信息页面的 post sign-out redirect URI 称作 Logto 登出重定向 URI,RedirectUri
属性称作 应用登出重定向 URI。
Logto 登出重定向 URI 的默认值为 /SignedOutCallback
,如果没有特殊要求,你可以保持它这个值。如果你想要更改,可以为 LogtoOptions
设置 SignedOutCallbackPath
属性:
记住,根据情况更新 Logto 应用详细信息页面的值。
实现登录/登出按钮(Razor 页面)
首先,向你的 PageModel
添加处理函数,例如:
然后,向你的 Razor 页面(html)添加按钮:
<p>Is authenticated: @User.Identity?.IsAuthenticated</p>
<form method="post">
@if (User.Identity?.IsAuthenticated == true)
{
<button type="submit" asp-page-handler="SignOut">Sign out</button>
} else {
<button type="submit" asp-page-handler="SignIn">Sign in</button>
}
</form>
如果用户没有认证,它将显示「登录」按钮,如果用户已经认证,它将显示「登出」按钮。
检查点: 运行网页应用
现在你可以运行网页应用并尝试用 Logto 登入/登出:
- 使用浏 览器打开网页应用,你应该看到「是否认证: False」和「登录」按钮。
- 点击「登录」按钮,你应该被重新定向到 Logto 登录页面。
- 登录后,你应该被重新定向回网页应用,并看到「是否认证: True」和「登出」按钮。
- 点击「登出」按钮,你应该被重新定向到 Logto 登出页面,然后重新定向回网页应用。
如果你在集成过程中遇到任何问题,请在 [email protected] 或 加入我们的 Discord 服务器 中通过邮箱联系我们!