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

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

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

在本文中,我们将介绍使用 iOS (Swift)Logto 快速构建 AWS SES 登录体验(用户认证 (Authentication))的步骤。

先决条件

  • 一个正在运行的 Logto 实例。查看 介绍页面 以开始。
  • iOS (Swift) 的基本知识。
  • 一个可用的 AWS SES 账户。

在 Logto 中创建一个应用程序

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

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

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

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

集成 Logto SDK

添加 Logto SDK 作为依赖

使用以下 URL 将 Logto SDK 添加为 Swift Package Manager 中的依赖项。

https://github.com/logto-io/swift.git

自 Xcode 11 起,你可以 直接导入 Swift 包,无需任何额外工具。

由于一些技术问题,我们目前不支持 CarthageCocoaPods

Carthage

Carthage 需要一个 xcodeproj 文件来构建,但是 swift package generate-xcodeproj 会报告失败,因为我们使用了本机社交插件的二进制目标。我们会尝试寻找解决方法。

CocoaPods

CocoaPods 不支持本地依赖和 monorepo,因此很难为此仓库创建 .podspec 文件。

初始化 LogtoClient

通过使用 LogtoConfig 对象创建一个 LogtoClient 实例来初始化客户端。

ContentView.swift
import Logto
import LogtoClient

let config = try? LogtoConfig(
endpoint: "<your-logto-endpoint>", // 例如 http://localhost:3001
appId: "<your-app-id>"
)
let client = LogtoClient(useConfig: config)
信息:

默认情况下,我们将 ID 令牌 (ID Token) 和刷新令牌 (Refresh Token) 等凭据存储在 Keychain 中。因此,当用户返回时,不需要再次登录。

要关闭此行为,请将 usingPersistStorage 设置为 false

let config = try? LogtoConfig(
// ...
usingPersistStorage: false
)

登录

在我们深入细节之前,这里是终端用户体验的快速概述。登录过程可以简化如下:

  1. 你的应用调用登录方法。
  2. 用户被重定向到 Logto 登录页面。对于原生应用,将打开系统浏览器。
  3. 用户登录并被重定向回你的应用(配置为重定向 URI)。

关于基于重定向的登录

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

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


配置重定向 URI

让我们切换到 Logto Console 的应用详情页面。添加一个重定向 URI io.logto://callback 并点击“保存更改”。

Logto Console 中的重定向 URI
信息:

iOS SDK 中的重定向 URI 仅供内部使用。不需要 添加 自定义 URL 方案 ,除非连接器要求。

登录和登出

备注:

在调用 .signInWithBrowser(redirectUri:) 之前,请确保你已在管理控制台中正确配置了重定向 URI。

你可以使用 client.signInWithBrowser(redirectUri:) 来让用户登录,并使用 client.signOut() 来让用户登出。

例如,在 SwiftUI 应用中:

ContentView.swift
struct ContentView: View {
@State var isAuthenticated: Bool

init() {
isAuthenticated = client.isAuthenticated
}

var body: some View {
VStack {
if isAuthenticated {
Button("Sign Out") {
Task { [self] in
await client.signOut()
isAuthenticated = false
}
}
} else {
Button("Sign In") {
Task { [self] in
do {
try await client.signInWithBrowser(redirectUri: "${
props.redirectUris[0] ?? 'io.logto://callback'
}")
isAuthenticated = true
} catch let error as LogtoClientErrors.SignIn {
// error occured during sign in
} catch {
// other errors
}
}
}
}
}
}
}

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

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

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

添加 AWS SES 连接器

Email 连接器是一种用于发送一次性密码 (OTP) 的方法,用于认证 (Authentication)。它支持 Email address 验证,以支持无密码认证 (Authentication),包括基于 Email 的注册、登录、双因素认证 (2FA) 和账户恢复。 你可以轻松地将 AWS SES 连接为你的 Email 提供商。使用 Logto Email 连接器,你可以在几分钟内完成设置。

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

  1. 导航到 Console > Connector > Email and SMS connectors
  2. 要添加新的 Email 连接器,点击“设置”按钮并选择“AWS SES”。
  3. 查看你选择的提供商的 README 文档。
  4. 在“参数配置”部分完成配置字段。
  5. 使用 JSON 编辑器自定义 Email 模板。
  6. 通过向你的 Email address 发送验证码来测试你的配置。

Connector tab

备注:

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

设置 AWS SES email connector

在 AWS 服务控制台中配置邮件服务

注册 AWS 账户

前往 AWS 并注册一个账户。

创建身份

  • 进入 Amazon Simple Email Service 控制台
  • 创建一个身份,选择以下选项之一
    • 创建一个域
    • 创建一个电子邮件地址

连接器的配置

  1. 点击 Amazon 控制台右上角的用户名进入 Security Credentials。如果你没有,创建一个 AccessKey 并妥善保存。
  2. 完成 Amazon Simple Email Service 连接器的设置:
    • 使用步骤 1 中获得的 AccessKey IDAccessKey Secret 分别填写 accessKeyIdaccessKeySecret
    • region:填写你用于发送邮件的身份所在的区域。
    • emailAddress:你用于发送邮件的电子邮件地址,格式为 Logto\<[email protected]>\<[email protected]>

以下参数是可选的;参数说明可以在 AWS SES API 文档 中找到。

  • feedbackForwardingEmailAddress
  • feedbackForwardingEmailAddressIdentityArn
  • configurationSetName

测试 Amazon SES 连接器

你可以输入一个电子邮件地址并点击“发送”以查看设置是否在“保存并完成”之前有效。

就是这样。别忘了在 登录体验中启用连接器

配置类型

名称类型
accessKeyIdstring
accessKeySecretstring
regionstring
emailAddressstring (OPTIONAL)
emailAddressIdentityArnstring (OPTIONAL)
feedbackForwardingEmailAddressstring (OPTIONAL)
feedbackForwardingEmailAddressIdentityArnstring (OPTIONAL)
configurationSetNamestring (OPTIONAL)
templatesTemplate[]
模板属性类型枚举值
subjectstringN/A
contentstringN/A
usageTypeenum string'Register' | 'SignIn' | 'ForgotPassword' | 'Generic'

保存你的配置

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

在登录体验中启用 AWS SES 连接器

一旦你成功创建了一个 连接器,你就可以启用基于手机号的无密码登录和注册。

  1. 导航到 Console > 登录体验 > 注册和登录
  2. 设置注册方法(可选):
    1. 选择“Email address”或“电子邮件或手机号”作为注册标识符。
    2. “注册时验证”被强制启用。你还可以在注册时启用“创建密码”。
  3. 设置登录方法:
    1. 选择 Email address 作为登录标识符之一。你可以提供多个可用的标识符(电子邮件、手机号和用户名)。
    2. 选择“验证码”和 / 或“密码”作为认证 (Authentication) 因素。
  4. 点击“保存更改”并在“实时预览”中测试。

登录体验选项卡

除了通过 一次性密码进行注册和登录外,你还可以启用密码恢复和基于 的安全验证,以及将 Email address 关联到个人资料。有关更多详细信息,请参阅 终端用户流程

测试和验证

返回到你的 iOS (Swift) 应用。你现在应该可以使用 AWS SES 登录了。享受吧!

进一步阅读

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

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

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

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