共用方式為


教學課程:支援 Web 後援

適用於內含白色核取記號的綠色圓圈。 iOS (Swift) 具有白色核取符號的綠色圓圈。 macOS (Swift)

本教學課程示範如何透過瀏覽器取得權杖,其中原生驗證不足以完成使用者流程。

在本教學課程中,您會了解如何:

  • 檢查 BrowserRequired 錯誤。
  • 處理 BrowserRequired 錯誤。

必要條件

需要瀏覽器

針對原生驗證不足以完成使用者流程的各種案例,BrowserRequired 是後援機制。

若要確保應用程式的穩定性並避免驗證流程中斷,強烈建議使用 SDK 的 acquireToken() 方法來繼續瀏覽器中的流程。

初始化 SDK 時,我們需要指定行動應用程式可以支援的挑戰類型。 以下是 SDK 接受的挑戰類型清單:

  • OOB (頻外):當您的 iOS/macOS 應用程式可以處理一次性密碼 (在此案例中為電子郵件程式碼) 時,請新增此挑戰類型。
  • 密碼:當您的應用程式能夠處理密碼型驗證時,請新增此挑戰類型。

當 Microsoft Entra 需要用戶端無法提供的功能時,將會傳回 BrowserRequired 錯誤。 例如,假設我們初始化 SDK 執行個體,只指定挑戰類型 OOB,但在 Microsoft Entra 系統管理中心,應用程式會使用電子郵件和密碼使用者流程進行設定。 從 SDK 執行個體呼叫 signUp(username) 方法時,我們會收到 BrowserRequired 錯誤,因為 Microsoft Entra 所需的挑戰類型 (此案例中的密碼) 必須不同於 SDK 中所設定的。

挑戰類型不足只是 BrowserRequired 可能發生的一個範例。 BrowserRequired 是可在各種案例中發生的一般後援機制。

範例流程

在下列程式碼片段中,您可以看到如何在 SDK 執行個體初始化期間指定挑戰類型:

nativeAuth = try MSALNativeAuthPublicClientApplication(
    clientId: "<client id>",
    tenantSubdomain: "<tenant subdomain>",
    challengeTypes: [.OOB]
)

在此情況下,我們僅指定挑戰類型 OOB。 假設在 Microsoft Entra 系統管理中心,應用程式會使用電子郵件和密碼使用者流程進行設定。

nativeAuth.signUp(username: email, delegate: self)

func onSignUpStartError(error: MSAL.SignUpStartError) {
    if error.isBrowserRequired {
        // handle browser required error
    }
}

從 SDK 執行個體呼叫 signUp(username:delegate) 方法時,我們會收到 BrowserRequired 錯誤,因為 Microsoft Entra 所需的挑戰類型 (此案例中的密碼) 必須不同於 SDK 中所設定的。

處理 BrowserRequired 錯誤

若要處理這類錯誤,我們需要啟動瀏覽器,並讓使用者可在那裡執行驗證流程。 這可以透過呼叫 acquireToken() 方法來完成。 為了使用此方法,必須完成一些額外的設定:

現在我們可以透過互動方式取得權杖和帳戶。 以下是操作範例:

func onSignUpStartError(error: MSAL.SignUpStartError) {
    if error.isBrowserRequired {
        let webviewParams = MSALWebviewParameters(authPresentationViewController: self)
        let parameters = MSALInteractiveTokenParameters(scopes: ["User.Read"], webviewParameters: webviewParams)

        nativeAuth.acquireToken(with: parameters) { (result: MSALResult?, error: Error?) in
            // result will contain account and tokens retrieved in the browser
        }
    }
}

傳回的權杖和帳戶與透過原生驗證流程擷取的權杖和帳戶相同。