Auth0.swift

Version Build Status Coverage Status License

📚 文档 • 🚀 快速入门 • 📃 支持策略 • 💬 反馈

从 v1 迁移?请查看 迁移指南

文档

快速入门

要求

重要提示

查看 支持策略,了解在什么情况下放弃 Xcode、Swift 和平台版本将**不被视为破坏性更改**。

安装

使用 Swift Package Manager

在 Xcode 中打开以下菜单项

File > Add Package Dependencies...

在**Search or Enter Package URL**搜索框中输入此 URL

https://github.com/auth0/Auth0.swift

然后,选择依赖规则并按**Add Package**。

使用 Cocoapods

将以下行添加到您的 Podfile

pod 'Auth0', '~> 2.10'

然后,运行 pod install

使用 Carthage

将以下行添加到您的 Cartfile

github "auth0/Auth0.swift" ~> 2.10

然后,运行 carthage bootstrap --use-xcframeworks

配置 SDK

前往 Auth0 控制面板 并创建一个新的 Native 应用程序。

Auth0.swift 需要 Auth0 应用程序的 Client IDDomain 才能与 Auth0 通信。您可以在 Auth0 应用程序的设置页面中找到这些详细信息。如果您有 自定义域名,请使用您的自定义域名,而不是设置页面中的值。

重要提示

请确保 Auth0 应用程序类型为 Native。否则,由于其他应用程序类型的不同配置,您可能会遇到错误。

使用 plist 配置 Client ID 和 Domain

在您的应用程序包中创建一个名为 Auth0.plistplist 文件,内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ClientId</key>
    <string>YOUR_AUTH0_CLIENT_ID</string>
    <key>Domain</key>
    <string>YOUR_AUTH0_DOMAIN</string>
</dict>
</plist>

以编程方式配置 Client ID 和 Domain

对于 Web 认证
Auth0
    .webAuth(clientId: "YOUR_AUTH0_CLIENT_ID", domain: "YOUR_AUTH0_DOMAIN")
    // ...
对于身份验证 API 客户端
Auth0
    .authentication(clientId: "YOUR_AUTH0_CLIENT_ID", domain: "YOUR_AUTH0_DOMAIN")
    // ...
对于管理 API 客户端(用户)
Auth0
    .users(token: credentials.accessToken, domain: "YOUR_AUTH0_DOMAIN")
    // ...

配置 Web 认证 (iOS / macOS)

配置回调和注销 URL

回调和注销 URL 是 Auth0 调用以重定向回您的应用程序的 URL。 Auth0 在验证用户身份后调用回调 URL,并在删除会话 cookie 后调用注销 URL。

由于回调和注销 URL 可以被操纵,因此您需要将您的 URL 添加到 Auth0 应用程序设置页面中的 Allowed Callback URLsAllowed Logout URLs 字段。 这将使 Auth0 能够将这些 URL 识别为有效。 如果未设置回调和注销 URL,用户将无法登录和退出应用程序,并且会收到错误。

转到您的 Auth0 应用程序 的设置页面,并根据您的应用程序的平台,将相应的 URL 添加到 Allowed Callback URLsAllowed Logout URLs。 如果您有 自定义域名,请将 YOUR_AUTH0_DOMAIN 替换为您的自定义域名,而不是设置页面中的值。

注意

在 iOS 17.4+ 和 macOS 14.4+ 上,可以使用通用链接作为回调和注销 URL。 启用后,Auth0.swift 将回退到在旧版本的 iOS / macOS 上使用自定义 URL 方案。

此功能需要 Xcode 15.3+ 和付费的 Apple Developer 帐户.

iOS
https://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_IDENTIFIER/callback,
YOUR_BUNDLE_IDENTIFIER://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_IDENTIFIER/callback
macOS
https://YOUR_AUTH0_DOMAIN/macos/YOUR_BUNDLE_IDENTIFIER/callback,
YOUR_BUNDLE_IDENTIFIER://YOUR_AUTH0_DOMAIN/macos/YOUR_BUNDLE_IDENTIFIER/callback
示例

如果您的 iOS 捆绑包标识符为 com.example.MyApp 并且您的 Auth0 Domain 为 example.us.auth0.com,则该值为

https://example.us.auth0.com/ios/com.example.MyApp/callback,
com.example.MyApp://example.us.auth0.com/ios/com.example.MyApp/callback

配置关联域

重要提示

此步骤需要付费的 Apple Developer 帐户。 使用通用链接作为回调和注销 URL 需要此步骤。 跳过此步骤以改为使用自定义 URL 方案。

配置团队 ID 和捆绑包标识符

滚动到 Auth0 应用程序设置页面的末尾,然后打开 Advanced Settings > Device Settings。 在 iOS 部分中,将 Team ID 设置为您的 Apple 团队 ID,并将 App ID 设置为您的应用程序的捆绑包标识符。

Screenshot of the iOS section inside the Auth0 application settings page

这会将您的应用程序添加到您的 Auth0 租户的 apple-app-site-association 文件。

添加关联域功能

在 Xcode 中,转到您的应用程序目标设置的 Signing and Capabilities 选项卡,然后按 + Capability 按钮。 然后选择 Associated Domains

Screenshot of the capabilities library inside Xcode

接下来,在 Associated Domains 下添加以下 条目

webcredentials:YOUR_AUTH0_DOMAIN
示例

如果您的 Auth0 Domain 为 example.us.auth0.com,则该值为

webcredentials:example.us.auth0.com

如果您有 自定义域名,请将 YOUR_AUTH0_DOMAIN 替换为您的自定义域名。

注意

为了使关联域工作,即使在为 iOS 模拟器构建时,也必须使用您的团队证书对您的应用程序进行签名。 确保您使用的是 Apple 团队,该团队的团队 ID 已在 Auth0 应用程序的设置页面中配置。

Web 认证登录 (iOS / macOS)

在要显示登录页面的文件中导入 Auth0 模块。

import Auth0

然后,在您的**Login**按钮的操作中显示 Universal Login 页面。

Auth0
    .webAuth()
    .useHTTPS() // Use a Universal Link callback URL on iOS 17.4+ / macOS 14.4+
    .start { result in
        switch result {
        case .success(let credentials):
            print("Obtained credentials: \(credentials)")
        case .failure(let error):
            print("Failed with: \(error)")
        }
    }
使用 async/await
do {
    let credentials = try await Auth0.webAuth().useHTTPS().start()
    print("Obtained credentials: \(credentials)")
} catch {
    print("Failed with: \(error)")
}
使用 Combine
Auth0
    .webAuth()
    .useHTTPS() // Use a Universal Link callback URL on iOS 17.4+ / macOS 14.4+
    .start()
    .sink(receiveCompletion: { completion in
        if case .failure(let error) = completion {
            print("Failed with: \(error)")
        }
    }, receiveValue: { credentials in
        print("Obtained credentials: \(credentials)")
    })
    .store(in: &cancellables)

Web 认证注销 (iOS / macOS)

注销用户包括清除 Universal Login 会话 cookie,然后从您的应用程序中删除用户的凭据。

在您的**Logout**按钮的操作中调用 clearSession() 方法。 清除会话 cookie 后,删除用户的凭据

Auth0
    .webAuth()
    .useHTTPS() // Use a Universal Link logout URL on iOS 17.4+ / macOS 14.4+
    .clearSession { result in
        switch result {
        case .success:
            print("Session cookie cleared")
            // Delete credentials
        case .failure(let error):
            print("Failed with: \(error)")
        }
    }
使用 async/await
do {
    try await Auth0.webAuth().useHTTPS().clearSession()
    print("Session cookie cleared")
    // Delete credentials
} catch {
    print("Failed with: \(error)")
}
使用 Combine
Auth0
    .webAuth()
    .useHTTPS() // Use a Universal Link logout URL on iOS 17.4+ / macOS 14.4+
    .clearSession()
    .sink(receiveCompletion: { completion in
        switch completion {
        case .finished:
            print("Session cookie cleared")
            // Delete credentials
        case .failure(let error):
            print("Failed with: \(error)")
        }
    }, receiveValue: {})
    .store(in: &cancellables)

SSO 警报框 (iOS / macOS)

Screenshot of the SSO alert box

查看 FAQ,了解有关使用 Web 认证时**默认**弹出的警报框的更多信息。

注意

另请参阅 这篇博文,以获得有关 iOS 单点登录 (SSO) 的详细概述。

下一步

示例 ↗ 中了解大多数功能

支持策略

此策略定义了 Auth0.swift 中对 Xcode、Swift 和平台(iOS、macOS、tvOS 和 watchOS)版本的支持范围。

Xcode

唯一受支持的 Xcode 版本是当前可用于向 App Store 提交应用程序的版本。 一旦某个 Xcode 版本不受支持,从 Auth0.swift 中删除它**将不被视为破坏性更改**,并且将在**次要**版本中完成。

Swift

最低支持的 Swift 次要版本是与最旧支持的 Xcode 版本一起发布的版本。 一旦某个 Swift 次要版本不受支持,从 Auth0.swift 中删除它**将不被视为破坏性更改**,并且将在**次要**版本中完成。

平台

我们仅支持任何平台的最后四个主要版本,包括当前主要版本。

一旦平台版本不受支持,从 Auth0.swift 中删除它**将不被视为破坏性更改**,并且将在**次要**版本中完成。 例如,当 iOS 18 发布时,将不再支持 iOS 14,并且 Auth0.swift 将能够在次要版本中删除它。

对于 macOS,为了此策略的目的,每年的命名版本都被认为是主要平台版本,而不管实际版本号如何。

反馈

贡献

我们感谢您对这个存储库的反馈和贡献! 在您开始之前,请参阅以下内容

提出问题

要提供反馈或报告错误,请在我们的 问题跟踪器 上提出问题。

漏洞报告

请勿在公共 GitHub 问题跟踪器上报告安全漏洞。 负责任的披露计划 详细说明了披露安全问题的程序。


Auth0 Logo

Auth0 是一个易于实施、适应性强的身份验证和授权平台。 要了解更多信息,请查看 为什么选择 Auth0?

此项目已获得 MIT 许可证的许可。 有关更多信息,请参见 LICENSE 文件。