教學課程:支援 Web 後援
適用於: iOS (Swift) macOS (Swift)
本教學課程示範如何透過瀏覽器取得權杖,其中原生驗證不足以完成使用者流程。
在本教學課程中,您會了解如何:
- 檢查 BrowserRequired 錯誤。
- 處理 BrowserRequired 錯誤。
必要條件
- 如果您使用 iOS,請遵循 在樣本原生 iOS 行動應用程式中登入使用者的步驟。
- 如果您使用 macOS,請遵循 使用原生驗證在樣本 macOS (Swift) 應用程式中登入使用者的步驟。
需要瀏覽器
針對原生驗證不足以完成使用者流程的各種案例,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
}
}
}
傳回的權杖和帳戶與透過原生驗證流程擷取的權杖和帳戶相同。