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

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

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

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

先决条件

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

在 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. 点击登出按钮以清除令牌存储并登出。

添加 Facebook 连接器

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

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

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

Connector tab

备注:

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

设置 Facebook 登录

注册 Facebook 开发者账户

如果你还没有,请注册为 Facebook 开发者

设置 Facebook 应用

  1. 访问 Apps 页面。
  2. 点击你现有的应用或创建一个新应用(如果需要)。
    • 选择的应用类型由你决定,但它应该包含 Facebook 登录 产品。
  3. 在应用仪表板页面,滚动到“添加产品”部分,并点击“Facebook 登录”卡片上的“设置”按钮。
  4. 跳过 Facebook 登录快速入门页面,点击侧边栏 -> “产品” -> “Facebook 登录” -> “设置”。
  5. 在 Facebook 登录设置页面,在“有效的 OAuth 重定向 URI”字段中填写 ${your_logto_origin}/callback/${connector_id}connector_id 可以在 Logto 管理控制台连接器详情页面的顶部栏找到。例如:
    • https://logto.dev/callback/${connector_id} 用于生产环境
    • https://localhost:3001/callback/${connector_id} 用于本地环境测试
  6. 点击右下角的“保存更改”按钮。

组合连接器 JSON

  1. 在 Facebook 应用仪表板页面,点击侧边栏 -> “设置” -> “基本”。
  2. 你将在面板上看到“App ID”和“App secret”。
  3. 点击 App secret 输入框后的“显示”按钮以复制其内容。
  4. 填写 Logto 连接器设置:
    • clientId 字段中填写来自 App ID 的字符串。
    • clientSecret 字段中填写来自 App secret 的字符串。
    • scope 字段中填写以逗号或空格分隔的权限列表字符串。如果你没有指定权限,默认权限是 email,public_profile

使用 Facebook 的测试用户测试登录

你可以使用测试、开发者和管理员用户的账户,在开发和实时应用模式下测试相关应用的登录。

你也可以直接将应用上线,以便任何 Facebook 用户都可以使用该应用登录。

  • 在应用仪表板页面,点击侧边栏 -> “角色” -> “测试用户”。
  • 点击“创建测试用户”按钮以创建一个测试用户。
  • 点击现有测试用户的“选项”按钮,你将看到更多操作,例如“更改姓名和密码”。

发布 Facebook 登录设置

通常,只有测试、管理员和开发者用户可以在开发模式下使用相关应用登录。

为了让普通 Facebook 用户在生产环境中使用该应用登录,你可能需要将你的 Facebook 应用切换到*实时模式,这取决于应用类型。例如,纯商业类型*应用没有“实时”切换按钮,但这不会阻碍你的使用。

  1. 在 Facebook 应用仪表板页面,点击侧边栏 -> “设置” -> “基本”。
  2. 如果需要,在面板上填写“隐私政策 URL”和“用户数据删除”字段。
  3. 点击右下角的“保存更改”按钮。
  4. 点击应用顶部栏的“实时”切换按钮。

配置类型

名称类型
clientIdstring
clientSecretstring
scopestring

保存你的配置

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

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

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

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

登录体验选项卡

测试和验证

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

拓展阅读

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

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

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

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