跳到主要内容
给我们的新朋友:

Logto 是一个为现代应用和 SaaS 产品设计的 Auth0 替代方案。它提供 Cloud开源 服务,帮助你快速启动身份和管理 (IAM) 系统。享受认证 (Authentication)、授权 (Authorization) 和多租户管理 一体化

我们建议从 Logto Cloud 上的免费开发租户开始。这可以让你轻松探索所有功能。

在本文中,我们将介绍使用 .NET Core (MVC)Logto 快速构建 OAuth2 登录体验(用户认证 (Authentication))的步骤。

先决条件

  • 一个正在运行的 Logto 实例。查看 介绍页面 以开始。
  • .NET Core (MVC) 的基本知识。
  • 一个可用的 OAuth2 账户。

在 Logto 中创建一个应用程序

Logto 基于 OpenID Connect (OIDC) 认证 (Authentication) 和 OAuth 2.0 授权 (Authorization)。它支持跨多个应用程序的联合身份管理,通常称为单点登录 (SSO)。

要创建你的 传统 Web 应用程序,只需按照以下步骤操作:

  1. 打开 Logto Console。在“开始使用”部分,点击“查看全部”链接以打开应用程序框架列表。或者,你可以导航到 Logto Console > Applications,然后点击“创建应用程序”按钮。 开始使用
  2. 在打开的模态窗口中,点击“传统 Web”部分,或使用左侧的快速过滤复选框过滤所有可用的“传统 Web”框架。点击 ".NET Core (MVC)" 框架卡片以开始创建你的应用程序。 框架
  3. 输入应用程序名称,例如“Bookstore”,然后点击“创建应用程序”。

🎉 太棒了!你刚刚在 Logto 中创建了你的第一个应用程序。你将看到一个祝贺页面,其中包含详细的集成指南。按照指南查看你的应用程序中的体验将会是什么样的。

集成 .NET Core (MVC) SDK

提示:
  • 以下演示基于 .NET Core 8.0 构建。该 SDK 兼容 .NET 6.0 或更高版本。
  • .NET Core 示例项目可在 GitHub 仓库 中找到。

安装

将 NuGet 包添加到你的项目中:

dotnet add package Logto.AspNetCore.Authentication

添加 Logto 认证 (Authentication)

打开 Startup.cs(或 Program.cs)并添加以下代码以注册 Logto 认证服务:

Program.cs
using Logto.AspNetCore.Authentication;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddLogtoAuthentication(options =>
{
options.Endpoint = builder.Configuration["Logto:Endpoint"]!;
options.AppId = builder.Configuration["Logto:AppId"]!;
options.AppSecret = builder.Configuration["Logto:AppSecret"];
});

AddLogtoAuthentication 方法将执行以下操作:

  • 将默认认证方案设置为 LogtoDefaults.CookieScheme
  • 将默认挑战方案设置为 LogtoDefaults.AuthenticationScheme
  • 将默认注销方案设置为 LogtoDefaults.AuthenticationScheme
  • 将 cookie 和 OpenID Connect 认证处理程序添加到认证方案中。

登录和登出流程

在我们继续之前,需要澄清 .NET Core 认证中间件中的两个容易混淆的术语:

  1. CallbackPath:用户登录后,Logto 将用户重定向回来的 URI(在 Logto 中称为“重定向 URI”)
  2. RedirectUri:在 Logto 认证中间件中完成必要操作后,将重定向到的 URI。

登录过程可以如下图所示:


类似地,.NET Core 也有用于注销流程的 SignedOutCallbackPathRedirectUri

为了清晰起见,我们将它们称为:

我们使用的术语.NET Core 术语
Logto 重定向 URICallbackPath
Logto 注销后重定向 URISignedOutCallbackPath
应用程序重定向 URIRedirectUri

关于基于重定向的登录

  1. 此认证 (Authentication) 过程遵循 OpenID Connect (OIDC) 协议,Logto 强制执行严格的安全措施以保护用户登录。
  2. 如果你有多个应用程序,可以使用相同的身份提供商 (IdP)(日志 (Logto))。一旦用户登录到一个应用程序,当用户访问另一个应用程序时,Logto 将自动完成登录过程。

要了解有关基于重定向的登录的原理和好处的更多信息,请参阅 Logto 登录体验解释

配置重定向 URI

备注:

在以下代码片段中,我们假设你的应用程序运行在 http://localhost:3000/

首先,让我们配置 Logto 重定向 URI。将以下 URI 添加到 Logto 应用详情页面的“重定向 URI”列表中:

http://localhost:3000/Callback

要配置 Logto 签出后重定向 URI,请将以下 URI 添加到 Logto 应用详情页面的“签出后重定向 URI”列表中:

http://localhost:3000/SignedOutCallback

更改默认路径

Logto 重定向 URI 的默认路径是 /Callback,而 Logto 签出后重定向 URI 的默认路径是 /SignedOutCallback

如果没有特殊要求,你可以保持原样。如果你想更改它,可以为 LogtoOptions 设置 CallbackPathSignedOutCallbackPath 属性:

Program.cs
builder.Services.AddLogtoAuthentication(options =>
{
// 其他配置...
options.CallbackPath = "/Foo";
options.SignedOutCallbackPath = "/Bar";
});

记得在 Logto 应用详情页面中相应地更新值。

实现登录 / 登出按钮

首先,向你的 Controller 添加操作方法,例如:

Controllers/HomeController.cs
public class HomeController : Controller
{
public IActionResult SignIn()
{
// 这将重定向用户到 Logto 登录页面。
return Challenge(new AuthenticationProperties { RedirectUri = "/" });
}

// 使用 `new` 关键字以避免与 `ControllerBase.SignOut` 方法冲突
new public IActionResult SignOut()
{
// 这将清除认证 cookie 并重定向用户到 Logto 登出页面
// 以清除 Logto 会话。
return SignOut(new AuthenticationProperties { RedirectUri = "/" });
}
}

然后,将链接添加到你的视图中:

Views/Home/Index.cshtml
<p>是否已认证:@User.Identity?.IsAuthenticated</p>
@if (User.Identity?.IsAuthenticated == true) {
<a asp-controller="Home" asp-action="SignOut">登出</a>
} else {
<a asp-controller="Home" asp-action="SignIn">登录</a>
}

如果用户未认证,它将显示“登录”链接;如果用户已认证,则显示“登出”链接。

检查点:测试你的应用程序

现在,你可以测试你的应用程序:

  1. 运行你的应用程序,你将看到登录按钮。
  2. 点击登录按钮,SDK 将初始化登录过程并将你重定向到 Logto 登录页面。
  3. 登录后,你将被重定向回你的应用程序,并看到登出按钮。
  4. 点击登出按钮以清除令牌存储并登出。

添加 OAuth2 连接器

要实现快速登录并提高用户转化率,请将 .NET Core (MVC) 作为身份提供商 (IdP) 进行连接。Logto 社交连接器可以帮助你在几分钟内通过允许输入多个参数来建立此连接。

要添加社交连接器,只需按照以下步骤操作:

  1. 导航到 Console > Connectors > Social Connectors
  2. 点击“添加社交连接器”并选择“OAuth2”。
  3. 按照 README 指南完成必填字段并自定义设置。

Connector tab

备注:

如果你正在按照现场连接器指南进行操作,可以跳过下一部分。

设置 标准 OAuth 2.0 应用

创建你的 OAuth 应用

当你打开此页面时,我们相信你已经知道要连接哪个社交身份提供商。首先要做的是确认身份提供商支持 OAuth 协议,这是配置有效连接器的前提条件。然后,按照身份提供商的说明注册并创建用于 OAuth 授权的相关应用。

配置你的连接器

出于安全考虑,我们仅支持“授权码”授权类型,并且它可以完美适应 Logto 的场景。

clientIdclientSecret 可以在你的 OAuth 应用详情页面找到。

clientId:客户端 ID 是一个唯一标识符,用于在注册时识别客户端应用程序。授权服务器使用此 ID 验证客户端应用程序的身份,并将任何授权的访问令牌与该特定客户端应用程序关联。

clientSecret:客户端密钥是授权服务器在注册期间发放给客户端应用程序的机密密钥。客户端应用程序使用此密钥在请求访问令牌时向授权服务器进行身份验证。客户端密钥被视为机密信息,应始终保持安全。

tokenEndpointAuthMethod:令牌端点认证方法由客户端应用程序在请求访问令牌时用于向授权服务器进行身份验证。要发现支持的方法,请查阅 OAuth 2.0 服务提供商的 OpenID Connect 发现端点中的 token_endpoint_auth_methods_supported 字段,或参考 OAuth 2.0 服务提供商提供的相关文档。

clientSecretJwtSigningAlgorithm (可选):仅在 tokenEndpointAuthMethodclient_secret_jwt 时需要。客户端密钥 JWT 签名算法由客户端应用程序用于在令牌请求期间向授权服务器发送的 JWT 进行签名。

scope:权限参数用于指定客户端应用程序请求访问的资源和权限集。权限参数通常定义为一个空格分隔的值列表,代表特定的权限。例如,权限值“read write”可能表示客户端应用程序请求对用户数据的读写访问。

你需要在社交供应商的文档中找到 authorizationEndpointtokenEndpointuserInfoEndpoint

authenticationEndpoint:此端点用于启动认证 (Authentication) 过程。认证 (Authentication) 过程通常涉及用户登录并授权客户端应用程序访问其资源。

tokenEndpoint:此端点由客户端应用程序用于获取可以用于访问请求资源的访问令牌。客户端应用程序通常向令牌端点发送带有授权类型和授权码的请求以接收访问令牌。

userInfoEndpoint:此端点由客户端应用程序用于获取有关用户的其他信息,例如他们的全名、电子邮件地址或个人资料图片。用户信息端点通常在客户端应用程序从令牌端点获取访问令牌后访问。

Logto 还提供了一个 profileMap 字段,用户可以自定义从社交供应商的配置文件中映射,这些配置文件通常不是标准的。键是 Logto 的标准用户配置文件字段名称,相应的值应该是社交配置文件的字段名称。在当前阶段,Logto 只关注社交配置文件中的 'id'、'name'、'avatar'、'email' 和 'phone',只有 'id' 是必需的,其他是可选字段。

responseTypegrantType 在授权码授权类型中只能是固定值,因此我们将它们设为可选,默认值将自动填充。

例如,你可以找到 Google 用户配置文件响应,因此其 profileMap 应如下所示:

{
"id": "sub",
"avatar": "picture"
}
备注:

我们提供了一个可选的 customConfig 键来放置你的自定义参数。 每个社交身份提供商可能在 OAuth 标准协议上有自己的变体。如果你想要的社交身份提供商严格遵循 OAuth 标准协议,那么你不需要关心 customConfig

配置类型

名称类型必需
authorizationEndpointstringtrue
userInfoEndpointstringtrue
clientIdstringtrue
clientSecretstringtrue
tokenEndpointResponseTypeenumfalse
responseTypestringfalse
grantTypestringfalse
tokenEndpointstringfalse
scopestringfalse
customConfigRecord<string, string>false
profileMapProfileMapfalse
ProfileMap 字段类型必需默认值
idstringfalseid
namestringfalsename
avatarstringfalseavatar
emailstringfalseemail
phonestringfalsephone

保存你的配置

仔细检查你是否在 Logto 连接器配置区域填写了必要的值。点击“保存并完成”(或“保存更改”),OAuth2 连接器现在应该可用了。

在登录体验中启用 OAuth2 连接器

一旦你成功创建了一个社交连接器,你可以在登录体验中将其启用为“继续使用 OAuth2”按钮。

  1. 导航到 Console > 登录体验 > 注册和登录
  2. (可选)如果只需要社交登录,选择“无”作为注册标识符。
  3. 将配置好的 OAuth2 连接器添加到“社交登录”部分。

登录体验选项卡

测试和验证

返回到你的 .NET Core (MVC) 应用。你现在应该可以使用 OAuth2 登录了。享受吧!

拓展阅读

终端用户流程:Logto 提供开箱即用的认证 (Authentication) 流程,包括多因素认证 (MFA) 和企业单点登录 (SSO),以及强大的 API,用于灵活实现账户设置、安全验证和多租户体验。

授权 (Authorization):授权 (Authorization) 定义了用户在被认证 (Authentication) 后可以执行的操作或访问的资源。探索如何保护你的 API 以用于原生和单页应用程序,并实现基于角色的访问控制 (RBAC)。

组织 (Organizations):在多租户 SaaS 和 B2B 应用中特别有效,组织功能支持租户创建、成员管理、组织级 RBAC 和即时供应。

客户 IAM 系列:我们关于客户(或消费者)身份和访问管理的系列博客文章,从 101 到高级主题及更深入的内容。