从 v1 迁移?请查看 迁移指南。
重要提示
查看 支持策略,了解在什么情况下放弃 Xcode、Swift 和平台版本将**不被视为破坏性更改**。
在 Xcode 中打开以下菜单项
File > Add Package Dependencies...
在**Search or Enter Package URL**搜索框中输入此 URL
https://github.com/auth0/Auth0.swift
然后,选择依赖规则并按**Add Package**。
将以下行添加到您的 Podfile
pod 'Auth0', '~> 2.10'
然后,运行 pod install
。
将以下行添加到您的 Cartfile
github "auth0/Auth0.swift" ~> 2.10
然后,运行 carthage bootstrap --use-xcframeworks
。
前往 Auth0 控制面板 并创建一个新的 Native 应用程序。
Auth0.swift 需要 Auth0 应用程序的 Client ID 和 Domain 才能与 Auth0 通信。您可以在 Auth0 应用程序的设置页面中找到这些详细信息。如果您有 自定义域名,请使用您的自定义域名,而不是设置页面中的值。
重要提示
请确保 Auth0 应用程序类型为 Native。否则,由于其他应用程序类型的不同配置,您可能会遇到错误。
在您的应用程序包中创建一个名为 Auth0.plist
的 plist
文件,内容如下
<?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>
Auth0
.webAuth(clientId: "YOUR_AUTH0_CLIENT_ID", domain: "YOUR_AUTH0_DOMAIN")
// ...
Auth0
.authentication(clientId: "YOUR_AUTH0_CLIENT_ID", domain: "YOUR_AUTH0_DOMAIN")
// ...
Auth0
.users(token: credentials.accessToken, domain: "YOUR_AUTH0_DOMAIN")
// ...
回调和注销 URL 是 Auth0 调用以重定向回您的应用程序的 URL。 Auth0 在验证用户身份后调用回调 URL,并在删除会话 cookie 后调用注销 URL。
由于回调和注销 URL 可以被操纵,因此您需要将您的 URL 添加到 Auth0 应用程序设置页面中的 Allowed Callback URLs 和 Allowed Logout URLs 字段。 这将使 Auth0 能够将这些 URL 识别为有效。 如果未设置回调和注销 URL,用户将无法登录和退出应用程序,并且会收到错误。
转到您的 Auth0 应用程序 的设置页面,并根据您的应用程序的平台,将相应的 URL 添加到 Allowed Callback URLs 和 Allowed Logout URLs。 如果您有 自定义域名,请将 YOUR_AUTH0_DOMAIN
替换为您的自定义域名,而不是设置页面中的值。
注意
在 iOS 17.4+ 和 macOS 14.4+ 上,可以使用通用链接作为回调和注销 URL。 启用后,Auth0.swift 将回退到在旧版本的 iOS / macOS 上使用自定义 URL 方案。
此功能需要 Xcode 15.3+ 和付费的 Apple Developer 帐户.
https://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_IDENTIFIER/callback,
YOUR_BUNDLE_IDENTIFIER://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_IDENTIFIER/callback
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 方案。
滚动到 Auth0 应用程序设置页面的末尾,然后打开 Advanced Settings > Device Settings。 在 iOS 部分中,将 Team ID 设置为您的 Apple 团队 ID,并将 App ID 设置为您的应用程序的捆绑包标识符。
这会将您的应用程序添加到您的 Auth0 租户的 apple-app-site-association
文件。
在 Xcode 中,转到您的应用程序目标设置的 Signing and Capabilities 选项卡,然后按 + Capability 按钮。 然后选择 Associated Domains。
接下来,在 Associated Domains 下添加以下 条目
webcredentials:YOUR_AUTH0_DOMAIN
如果您的 Auth0 Domain 为 example.us.auth0.com
,则该值为
webcredentials:example.us.auth0.com
如果您有 自定义域名,请将 YOUR_AUTH0_DOMAIN
替换为您的自定义域名。
注意
为了使关联域工作,即使在为 iOS 模拟器构建时,也必须使用您的团队证书对您的应用程序进行签名。 确保您使用的是 Apple 团队,该团队的团队 ID 已在 Auth0 应用程序的设置页面中配置。
在要显示登录页面的文件中导入 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)")
}
}
do {
let credentials = try await Auth0.webAuth().useHTTPS().start()
print("Obtained credentials: \(credentials)")
} catch {
print("Failed with: \(error)")
}
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)
注销用户包括清除 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)")
}
}
do {
try await Auth0.webAuth().useHTTPS().clearSession()
print("Session cookie cleared")
// Delete credentials
} catch {
print("Failed with: \(error)")
}
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)
查看 FAQ,了解有关使用 Web 认证时**默认**弹出的警报框的更多信息。
注意
另请参阅 这篇博文,以获得有关 iOS 单点登录 (SSO) 的详细概述。
在 示例 ↗ 中了解大多数功能
/userinfo
端点获取最新的用户信息。此策略定义了 Auth0.swift 中对 Xcode、Swift 和平台(iOS、macOS、tvOS 和 watchOS)版本的支持范围。
唯一受支持的 Xcode 版本是当前可用于向 App Store 提交应用程序的版本。 一旦某个 Xcode 版本不受支持,从 Auth0.swift 中删除它**将不被视为破坏性更改**,并且将在**次要**版本中完成。
最低支持的 Swift 次要版本是与最旧支持的 Xcode 版本一起发布的版本。 一旦某个 Swift 次要版本不受支持,从 Auth0.swift 中删除它**将不被视为破坏性更改**,并且将在**次要**版本中完成。
我们仅支持任何平台的最后四个主要版本,包括当前主要版本。
一旦平台版本不受支持,从 Auth0.swift 中删除它**将不被视为破坏性更改**,并且将在**次要**版本中完成。 例如,当 iOS 18 发布时,将不再支持 iOS 14,并且 Auth0.swift 将能够在次要版本中删除它。
对于 macOS,为了此策略的目的,每年的命名版本都被认为是主要平台版本,而不管实际版本号如何。
我们感谢您对这个存储库的反馈和贡献! 在您开始之前,请参阅以下内容
要提供反馈或报告错误,请在我们的 问题跟踪器 上提出问题。
请勿在公共 GitHub 问题跟踪器上报告安全漏洞。 负责任的披露计划 详细说明了披露安全问题的程序。
Auth0 是一个易于实施、适应性强的身份验证和授权平台。 要了解更多信息,请查看 为什么选择 Auth0?
此项目已获得 MIT 许可证的许可。 有关更多信息,请参见 LICENSE 文件。