OktaAuthSdk 2.4.6

OktaAuthSdk 2.4.6

Mike NachbaurIldar 维护。



  • Okta 开发者

CI Status Carthage compatible Version License Platform Swift

Okta Swift 身份验证 SDK

Okta 身份验证 SDK 是围绕 Okta 身份验证 API 的一种便利包装。

这个库适合我吗?

此 SDK 是 Okta 身份验证 API 的便捷包装。如果您需要满足以下情况之一,则这些 API 强大且有用

  • 您有一个现有的应用程序需要接受主要凭证(用户名和密码),并在与 Okta 通信之前执行自定义逻辑。
  • 您有相当广泛的自定义身份验证工作流程或 UI 需求,以至于 Okta 的托管登录页面或 登录小部件 不能提供足够的灵活性。

此 SDK 的强大功能伴随着更多的责任和维护:您将需要手动设计身份验证工作流程和 UI,响应 Okta 身份验证状态机中的所有相关状态,并保持与 Okta 中的新特性和状态同步。

否则,大多数应用可以使用Okta提供的登录页面或登录小部件。在这些情况下,您应该使用Okta的OIDC SDK for iOS或其他的OIDC/OAuth 2.0库。

认证状态机

Okta的认证API是基于一个状态机构建的。为了使用这个库,您需要熟悉可用的状态。您将需要为要支持的每个状态实现一个处理程序。

State Model Diagram

发布状态

此库使用语义版本来发布,并遵循Okta的库版本策略

版本 状态
1.x ⚠️已淘汰
2.x ✔️稳定

最新的版本可以在版本发布页找到。

需要帮助?

如果您在使用SDK时遇到问题,您可以:

先决条件

如果您还没有一个开发者版账户,您可以在https://developer.okta.com/signup/创建一个。

入门

Swift 包管理器

将以下内容添加到您 Package.swift 文件中定义的 dependencies 属性中。您可以使用 majorVersionminor 参数选择版本。例如

    dependencies: [
        .Package(url: "https://github.com/okta/okta-auth-swift.git", majorVersion: <majorVersion>, minor: <minor>)
    ]

CocoaPods

此 SDK 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod "OktaAuthSdk"

Carthage

要使用 Carthage 将此 SDK 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "okta/okta-auth-swift"

使用说明

身份验证 SDK 帮助您使用自己的 UI 元素构建以下流程

  • 主要身份验证 - 允许您验证用户的用户名和密码凭据。
  • 多因素身份验证 (MFA) - 通过要求额外的认证因素(如临时一次性密码或短信密码)来加强基于密码的身份验证的安全性。此 SDK 支持管理员启用 MFA 因素的用户注册,以及基于您的 Okta Sign-On 策略的 MFA 挑战。
  • 解锁账户 - 如果用户由于多次失败的登录尝试而被锁定,则解锁用户账户。**此功能受管理员设置的安全策略约束**。
  • 恢复密码 - 如果用户忘记密码,则允许用户安全地重置密码。**此功能受管理员设置的安全策略约束**。
  • 使用状态令牌恢复身份验证/解锁/恢复交易

要启动特定的流程,请调用 OktaAuthSdk.swift 中提供的可用函数之一

// Authentication
public class func authenticate(with url: URL,
                               username: String,
                               password: String?,
                               onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                               onError: @escaping (_ error: OktaError) -> Void)

// Unlock account
public class func unlockAccount(with url: URL,
                                username: String,
                                factorType: OktaRecoveryFactors,
                                onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                                onError: @escaping (_ error: OktaError) -> Void)

// Forgot password
public class func recoverPassword(with url: URL,
                                  username: String,
                                  factorType: OktaRecoveryFactors,
                                  onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                                  onError: @escaping (_ error: OktaError) -> Void)

// Restore authentication
public class func fetchStatus(with stateToken: String,
                              using url: URL,
                              onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                              onError: @escaping (_ error: OktaError) -> Void)

请注意,关闭onStatusChange返回一个OktaAuthStatus实例作为参数。一个OktaAuthStatus类实例代表服务器返回的当前状态。开发者有责任处理当前状态,以便继续进行启动的流程。通过调用status.statusType检查状态类型,并将其转换为具体的状态类。以下是一个示例处理函数:

func handleStatus(status: OktaAuthStatus) {

    switch status.statusType {
    case .success:
        let successState: OktaAuthStatusSuccess = status as! OktaAuthStatusSuccess
        handleSuccessStatus(successStatus: successStatus)

    case .passwordWarning:
        let warningPasswordStatus: OktaAuthStatusPasswordWarning = status as! OktaAuthStatusPasswordWarning
        handlePasswordWarning(passwordWarningStatus: warningPasswordStatus)

    case .passwordExpired:
        let expiredPasswordStatus: OktaAuthStatusPasswordExpired = status as! OktaAuthStatusPasswordExpired
        handleChangePassword(passwordExpiredStatus: expiredPasswordStatus)

    case .MFAEnroll:
        let mfaEnroll: OktaAuthStatusFactorEnroll = status as! OktaAuthStatusFactorEnroll
        handleEnrollment(enrollmentStatus: mfaEnrollStatus)

    case .MFAEnrollActivate:
        let mfaEnrollActivate: OktaAuthStatusFactorEnrollActivate = status as! OktaAuthStatusFactorEnrollActivate
        handleActivateEnrollment(enrollActivateStatus: mfaEnrollActivateStatus)

    case .MFARequired:
        let mfaRequired: OktaAuthStatusFactorRequired = status as! OktaAuthStatusFactorRequired
        handleFactorRequired(factorRequiredStatus: mfaRequiredStatus)

    case .MFAChallenge:
        let mfaChallenge: OktaAuthStatusFactorChallenge = status as! OktaAuthStatusFactorChallenge
        handleFactorChallenge(factorChallengeStatus: mfaChallengeStatus)

    case .recovery:
        let recovery: OktaAuthStatusRecovery = status as! OktaAuthStatusRecovery
        handleRecovery(recoveryStatus: recoveryStatus)

    case .recoveryChallenge:
        let recoveyChallengeStatus: OktaAuthStatusRecoveryChallenge = status as! OktaAuthStatusRecoveryChallenge
        handleRecoveryChallenge(recoveryChallengeStatus: recoveyChallengeStatus)

    case .passwordReset:
        let passwordResetStatus: OktaAuthStatuPasswordReset = status as! OktaAuthStatuPasswordReset
        handlePasswordReset(passwordResetStatus: passwordResetStatus)

    case .lockedOut:
        let lockedOutStatus: OktaAuthStatusLockedOut = status as! OktaAuthStatusLockedOut
        handleLockedOut(lockedOutStatus: lockedOutStatus)

    case .unauthenticated:
        let unauthenticatedStatus: OktaAuthUnauthenticated = status as! OktaAuthUnauthenticated
        handleUnauthenticated(unauthenticatedStatus: unauthenticatedStatus)
    }
}

示例应用示例

认证一个用户

认证流程从一个对authenticate方法的调用开始

OktaAuthSdk.authenticate(with: URL(string: "https://{yourOktaDomain}")!,
                         username: "username",
                         password: "password",
                         onStatusChange: { authStatus in
                             handleStatus(status: authStatus)
},
                         onError: { error in
                             handleError(error)
})

请参阅API文档的主要认证部分以了解更多关于此API请求的信息。示例应用示例

解锁账户

OktaAuthSdk.unlockAccount(with: URL(string: "https://{yourOktaDomain}")!,
                          username: "username",
                          factorType: .sms,
                          onStatusChange: { authStatus in
                              handleStatus(status: authStatus)
},
                          onError: { error in
                              handleError(error)
})

请参阅API文档中解锁账户部分以了解更多关于此API请求的信息。示例应用示例

忘记密码

OktaAuthSdk.recoverPassword(with: URL(string: "https://{yourOktaDomain}")!,
                            username: "username",
                            factorType: .sms,
                            onStatusChange: { authStatus in
                                handleStatus(status: authStatus)
},
                            onError: { error in
                                handleError(error)
})

请参阅API文档中忘记密码部分以了解更多关于此API请求的信息。示例应用示例

使用状态令牌恢复认证或恢复交易

OktaAuthSdk.fetchStatus(with: "state_token",
                        using: URL(string: "https://{yourOktaDomain}")!,
                        onStatusChange: { authStatus in
                            handleStatus(status: authStatus)
},
                        onError: { error in
                            handleError(error)
})

请参阅API文档中获取交易状态部分以了解更多关于此API请求的信息。

API 参考文档 - 状态类

状态类集合。将状态实例降低到特定状态类,以获取特定于状态的功能和属性。

OktaAuthStatus

实现某些常见函数的基础状态类。还包含了一个 statusType 属性,用于检查实际状态类型。

canReturn

如果当前状态可以过渡到上一个状态,则返回 true

open func canReturn() -> Bool

示例应用 示例

returnToPreviousStatus

将当前事务状态移回上一个状态。

open func returnToPreviousStatus(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                                 onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

canCancel

如果当前流程可以取消,则返回 true

open func canCancel() -> Bool

示例应用 示例

cancel

取消当前事务并吊销状态令牌。

open func cancel(onSuccess: (() -> Void)? = nil,
                 onError: ((_ error: OktaError) -> Void)? = nil)

示例应用 示例代码

OktaAuthStatusUnauthenticated

此类用于启动身份验证或恢复事务。

open func authenticate(username: String,
                       password: String,
                       onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                       onError: @escaping (_ error: OktaError) -> Void)

open func unlockAccount(username: String,
                        factorType: OktaRecoveryFactors,
                        onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                        onError: @escaping (_ error: OktaError) -> Void)

open func recoverPassword(username: String,
                          factorType: OktaRecoveryFactors,
                          onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                          onError: @escaping (_ error: OktaError) -> Void)

OktaAuthStatusSuccess

事务已成功完成。添加处理函数以检索会话令牌。示例应用 示例代码

OktaAuthStatusFactorEnroll

用户必须选择并注册一个可用的因素进行额外的验证。添加处理函数以注册特定因素。

canEnrollFactor

如果可以注册特定因素,则返回 true

open func canEnrollFactor(factor: OktaFactor) -> Bool

canSkipEnrollment

如果可以跳过注册,则返回 true

open func canSkipEnrollment() -> Bool

示例应用 示例代码

跳过注册

跳过当前事务状态,前进到下一个状态。

open func skipEnrollment(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                         onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

注册因子

使用用户MFA策略分配的因子注册用户。

open func enrollFactor(factor: OktaFactor,
                       questionId: String?,
                       answer: String?,
                       credentialId: String?,
                       passCode: String?,
                       phoneNumber: String?,
                       onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                       onError: @escaping (_ error: OktaError) -> Void)

OktaAuthStatusFactorEnrollActivate

用户必须激活因子以完成注册。

canResend

如果SDK可以重新发送因子,则返回true

open func canResend(factor: OktaFactor) -> Bool

示例应用 示例

激活因子

激活sms、call和software:totp因素以完成注册过程。

open func activateFactor(passCode: String?,
                         onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                         onError: @escaping (_ error: OktaError) -> Void)

resendFactor

尝试重新发送激活请求。

open func resendFactor(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                       onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

OktaAuthStatusFactorRequired

用户必须使用之前注册的因素进行额外的验证。

selectFactor

触发所选因素。向Okta Verify应用程序发送短信/电话一次性密码(OTP)或推送通知。

open func selectFactor(_ factor: OktaFactor,
                       onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                       onError: @escaping (_ error: OktaError) -> Void)

OktaAuthStatusFactorChallenge

用户必须验证特定因素的挑战。

canVerify

如果SDK可以验证挑战,则返回true

open func canVerify() -> Bool

示例应用示例

canResend

如果SDK可以为所选因素重新发送挑战,则返回true

open func canResend() -> Bool

示例应用示例

verifyFactor

验证问题的答案因子或短信/电话/Totp/令牌因子的一次性密码。

open func verifyFactor(passCode: String?,
                       answerToSecurityQuestion: String?,
                       onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                       onError: @escaping (_ error: OktaError) -> Void)

重新发送因子

如果用户由于超时或错误而没有收到之前的代码,则发送另一个一次性密码或推送通知。

open func resendFactor(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                       onError: @escaping (_ error: OktaError) -> Void)

示例应用示例

OktaAuthStatusPasswordExpired

用户的密码验证成功但已过期。

canChange

如果可以更改密码,则返回true

open func canChange() -> Bool

changePassword

通过提供当前密码和新密码来更改用户的密码。

open func changePassword(oldPassword: String,
                         newPassword: String,
                         onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                         onError: @escaping (_ error: OktaError) -> Void)

示例应用示例

OktaAuthStatusPasswordWarning

用户的密码验证成功但即将过期,应该更改。

canChange

如果可以更改密码,则返回true

open func canChange() -> Bool

canSkip

如果用户可以跳过密码更改,则返回 true

open func canSkip() -> Bool

示例应用程序示例

更改密码

通过提供当前密码和新密码来更改用户的密码。

open func changePassword(oldPassword: String,
                         newPassword: String,
                         onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                         onError: @escaping (_ error: OktaError) -> Void)

示例应用程序示例

跳过密码更改

发送跳过请求以跳过密码更改状态并进入下一个状态。

open func skipPasswordChange(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                             onError: @escaping (_ error: OktaError) -> Void)

示例应用程序示例

OktaAuthStatusRecovery

用户请求恢复令牌以重置其密码或解锁其帐户。

canRecover

如果恢复流程可以继续,则返回 true

open func canRecover() -> Bool

示例应用程序示例

恢复答题

回答用户的恢复问题

open func recoverWithAnswer(_ answer: String,
                            onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                            onError: @escaping (_ error: OktaError) -> Void)

示例应用示例

OktaAuthStatusRecoveryChallenge

用户必须验证特定的恢复挑战因素。

canVerify

如因素可验证,则返回true

open func canVerify() -> Bool

示例应用示例

canResend

如因素可重新发送,则返回true

open func canResend() -> Bool

示例应用示例

verifyFactor

验证发送到用户设备的用于恢复事务主要身份验证的短信/通话OTP(验证码)。

open func verifyFactor(passCode: String,
                       onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                       onError: @escaping (_ error: OktaError) -> Void)

示例应用示例

重发因子

重新发送发送到用户设备的用于 Recovery 交易的 SMS/呼叫 OTP。

open func resendFactor(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                       onError: @escaping (_ error: OktaError) -> Void)

示例应用程序 示例

OktaAuthStatusPasswordReset

用户成功回答了他们的恢复问题,必须设置一个新的密码。

canReset

如果可以重置密码,则返回 true

open func canReset() -> Bool

示例应用程序 示例

重置密码

重置用户的密码以完成 Recovery 交易。

open func resetPassword(newPassword: String,
                        onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                        onError: @escaping (_ error: OktaError) -> Void)

示例应用程序 示例

OktaAuthStatusLockedOut

用户账户已被锁定;需要自助解锁或管理员解锁。

canUnlock

如果用户账户可以解锁,则返回 true

open func canUnlock() -> Bool

解锁

为指定用户启动新的解锁恢复事务并颁发可用于解锁用户账户的恢复令牌。

open func unlock(username: String,
                 factorType: OktaRecoveryFactors,
                 onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                 onError: @escaping (_ error: OktaError) -> Void)

API参考 - 因子类

因子类集合。将因子实例下转换为特定的因子类的具体类,以访问特定的函数和属性。

OktaFactorSms

注册

使用Okta SMS因子和短信配置文件注册用户。在注册过程中,将发送一条包含OTP的短信到设备。

public func enroll(phoneNumber: String?,
                   onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

示例应用 示例

激活

通过验证OTP激活SMS因子。

public func activate(passCode: String?,
                     onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                     onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

选择

向设备发送新的OTP。

public func select(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                   onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

验证

通过验证OTP来验证已注册的短信因素。

public func verify(passCode: String?,
                   onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                   onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

OktaFactorCall

注册

通过使用Okta呼叫因素和呼叫配置文件注册用户。在注册过程中,向设备发送带OTP的语音呼叫。

public func enroll(phoneNumber: String?,
                   onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

示例应用 示例

激活

通过验证OTP来激活呼叫因素。

public func activate(passCode: String?,
                     onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                     onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

选择

向设备发送新的OTP。

public func select(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                   onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

验证

通过验证OTP验证已注册的呼叫因素。

public func verify(passCode: String?,
                   onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                   onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

OktaFactorPush

注册

使用Okta验证推送因素注册用户。因素必须通过扫描二维码或在通过电子邮件或短信发送的激活链接中访问激活设备。使用已发布的激活链接来嵌入二维码或分发激活电子邮件或短信。

public func enroll(onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

示例应用 示例

激活

推送因素的激活是异步的,当factorResult返回等待状态时必须轮询以检查完成状态。激活有时间限制(分钟),如果未在expireAt时间戳之前完成,则将超时。如果激活已过期,请重新启动激活过程。

public func activate(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                     onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

checkFactorResult

推送通知发送到用户的设备后,我们需要知道用户何时完成激活/挑战。

public func checkFactorResult(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                              onError: @escaping (_ error: OktaError) -> Void)

status.factorResult的值等于.waiting时,持续调用checkFactorResult函数。注意不要过于频繁地调用checkFactorResult函数,保持轮询间隔在3-5秒以内,以避免给服务器带来额外负载。轮询逻辑的示例

func handlePushChallenge(factor: OktaFactorPush) {
    factor.checkFactorResult(onStatusChange: { (status) in
        if status.factorResult == .waiting {
            DispatchQueue.main.asyncAfter(deadline:.now() + 5.0) {
                self.handlePushChallenge(factor: factor)
            }   
        } else {
            self.handleStatus(status: status)
        }
    }, onError: { (error) in
        self.handleError(error)
    })
}

sendActivationLinkViaSms

当用户无法扫描作为Okta Verify交易一部分提供的二维码时,发送激活短信。如果用户出于任何原因无法扫描二维码,他们可以使用短信中提供的链接来完成交易。

public func sendActivationLinkViaSms(with phoneNumber:String,
                                     onSuccess: @escaping () -> Void,
                                     onError: @escaping (_ error: OktaError) -> Void)

sendActivationLinkViaEmail

当用户无法扫描作为Okta Verify交易一部分提供的二维码时,发送激活电子邮件。如果用户出于任何原因无法扫描二维码,他们可以使用电子邮件中提供的链接来完成交易。

public func sendActivationLinkViaEmail(onSuccess: @escaping () -> Void,
                                       onError: @escaping (_ error: OktaError) -> Void)

select

向设备发送异步推送通知(挑战),供用户批准或拒绝。

public func select(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                   onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

verify

向设备发送异步推送通知(挑战),供用户批准或拒绝。交易的factorResult将具有等待、成功、拒绝或超时的结果。

public func verify(onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                   onError: @escaping (_ error: OktaError) -> Void)

OktaFactorTotp

enroll

使用Okta令牌:软件:totp因素注册用户。

public func enroll(onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

示例应用 示例

activate

通过验证OTP(密码)激活token:软件:totp因素。

public func activate(passCode: String,
                     onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                     onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

select

从所需因素列表中选择totp因素并验证OTP(密码)。

public func select(passCode: String,
                   onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

示例应用 示例

verify

验证token:软件:totp因素的OTP。

public func verify(passCode: String,
                   onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                   onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

OktaFactorQuestion

enroll

使用Okta问题因素注册用户。可通过downloadSecurityQuestions调用下载安全问题的列表。注意:安全提问因素不需要激活,并在注册后处于活动状态

public func enroll(questionId: String,
                   answer: String,
                   onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

示例应用 示例

downloadSecurityQuestions

下载用户的安全问题

public func downloadSecurityQuestions(onDownloadComplete: @escaping ([SecurityQuestion]) -> Void,
                                      onError: @escaping (_ error: OktaError) -> Void)

示例应用 示例

select

从所需因素的列表中选择问题因素并验证答案。

public func select(answerToSecurityQuestion: String,
                   onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

示例应用 示例

verify

验证问题因素的问题答案。

public func verify(answerToSecurityQuestion: String,
                   onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

示例应用 示例

OktaFactorToken

注册

使用 RSA SecurID 因子和令牌配置文件注册用户。RSA 令牌必须在注册请求中与当前的 PIN+密码进行验证。

public func enroll(credentialId: String,
                   passCode: String,
                   onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

选择

从所需因素列表中选择令牌因素并验证密码。

public func select(passCode: String,
                   onStatusChange: @escaping (OktaAuthStatus) -> Void,
                   onError: @escaping (OktaError) -> Void)

示例应用 示例

验证

向令牌因素验证密码。

public func verify(passCode: String,
                   onStatusChange: @escaping (_ newStatus: OktaAuthStatus) -> Void,
                   onError: @escaping (_ error: OktaError) -> Void)

OktaFactorOther

SDK 不实现所有可用因素的可选类。SDK 返回 OktaFactorOther 实例,用于不实现的因素,例如:谷歌身份验证器、赛门铁克 VIP 因子、U2F 等。使用 OktaFactorOther 类向 Okta 服务器发送任意数据。有关有效负载的更多信息,请参阅 API 文档

sendRequest

在 HTTPS 请求中发送任意的 kayValuePayload 主体。

public func sendRequest(with link: LinksResponse.Link,
                        keyValuePayload: Dictionary<String, Any>,
                        onStatusChange: @escaping (OktaAuthStatus) -> Void,
                        onError: @escaping (OktaError) -> Void)

SDK 扩展

您可以使用任何可用的状态类进行子类化,并添加自己的实现或通过添加额外的属性来扩展。在这种情况下,您还必须从OktaAuthStatusResponseHandler类进行子类化,并重写handleServerResponse或/和createAuthStatus方法。这在以下情况下很有用

  • Okta在状态机中添加了一个新状态,您需要处理它
  • 您想更改状态轮询逻辑
  • 您创建了一个从OktaAuthStatus*类继承的类
class MyResponseHandler: OktaAuthStatusResponseHandler {
    override func createAuthStatus(basedOn response: OktaAPISuccessResponse,
                                   and currentStatus: OktaAuthStatus) throws -> OktaAuthStatus {
        // implementation
    }
}

let unauthenticatedStatus = OktaAuthStatusUnauthenticated(oktaDomain: URL(string: "https://{yourOktaDomain}")!,
                                                          responseHandler: MyResponseHandler())

网络扩展

您可以通过注入HTTP请求监听器来使用自己的HTTP库发送请求。实现OktaHTTPRequestListenerProtocol,并通过属性注入将符合协议的实例注入到OktaAPI中。您可以直接使用提供的天URLRequest,或在其发送之前将其数据复制到您自己的HTTP请求中

public protocol OktaHTTPRequestListenerProtocol {
    func sendRequest(_ request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void)
}

贡献

我们很高兴接受贡献和PR!