简体中文
  • asp-net-core
  • c-sharp
  • 教程
  • auth
  • 认证
  • oauth
  • oidc
  • 身份

使用 Logto 构建 ASP.NET Core 认证

学习如何通过集成 Logto SDK 来构建一个 ASP.NET Core 的用户认证流程。

Gao
Gao
Founder

简介

  • Logto 是一个现代的 Auth0 替代方案,用于最小化努力构建客户身份基础设施。它支持各种登录方式,包括用户名、电子邮件、电话号码以及像 Google 和 GitHub 这样的受欢迎的社交登录。
  • ASP.NET Core 是用于构建现代、基于云的、互联网连接应用的跨平台、高性能、开源框架。

在本教程中,我们将向你展示如何通过集成 Logto SDK 来构建一个 ASP.NET Core 用户认证流程。本教程采用的编程语言为 C#。

准备工作

在开始前,确保你拥有以下内容:

  • Logto 账户。如果你还没有,可以免费注册
  • .NET 开发环境,以及 ASP.NET Core 项目。如果没有,可以安装 .NET 并遵循 ASP.NET 教程 来设置你的项目。

创建 Logto 应用

首先,创建一个「传统网页」类型的 Logto 应用。按照以下步骤创建 Logto 应用:

  1. 登录 Logto 控制台
  2. 在左侧导航栏中,点击 应用程序
  3. 点击 创建应用程序
  4. 在打开的页面中,找到「传统网页应用」部分并定位到「ASP.NET Core」卡片。
  5. 点击 开始构建,并输入你的应用名称。
  6. 点击 创建

那么你就应该看到一个交互式教程,引导你将 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 是不同的:

  1. Logto 应用详细信息中的重定向 URI 是用户登录后 Logto 会将用户重定向回去的 URI。
  2. RedirectUri 属性是在 Logto 认证中间件中执行必要行动后将重定向的 URI。

行动的顺序是 1 -> 2。为了清楚,让我们把 Logto 应用详细信息页面的重定向 URI 称作 Logto 重定向 URIRedirectUri 属性称作 应用重定向 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 是不同的:

  1. Logto 应用详细信息中的 post sign-out redirect URI 是用户登出后 Logto 会将用户重定向回去的 URI。
  2. RedirectUri 属性是在 Logto 认证中间件中执行必要行动后将重定向的 URI。

行动的顺序是 1 -> 2。为了清楚,让我们把 Logto 应用详细信息页面的 post sign-out redirect URI 称作 Logto 登出重定向 URIRedirectUri 属性称作 应用登出重定向 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 登入/登出:

  1. 使用浏览器打开网页应用,你应该看到「是否认证: False」和「登录」按钮。
  2. 点击「登录」按钮,你应该被重新定向到 Logto 登录页面。
  3. 登录后,你应该被重新定向回网页应用,并看到「是否认证: True」和「登出」按钮。
  4. 点击「登出」按钮,你应该被重新定向到 Logto 登出页面,然后重新定向回网页应用。

如果你在集成过程中遇到任何问题,请在 [email protected]加入我们的 Discord 服务器 中通过邮箱联系我们!

进一步阅读