教程:支援 Web 後備措施
適用於:白色圓圈內有灰色 X 符號 企業租戶
外部租戶(了解詳情)
本教學課程示範如何透過瀏覽器取得令牌,其中的原生驗證不足以完成使用者流程。
在本教學課程中,您將瞭解如何:
- 檢查所需瀏覽器錯誤。
- 處理 BrowserRequired 錯誤。
先決條件
- 如果您使用 iOS,請依照在範例原生 iOS 行動應用程式中登入使用者的步驟 。
- 如果您正在使用macOS,請按照所述步驟,透過原生驗證在範例macOS(Swift)應用程式中登入使用者。
需要瀏覽器
BrowserRequired
是一種在各種情境下,當原生驗證無法充分完成使用者流程時的備援機制。
為了確保應用程式的穩定性,並避免驗證流程中斷,強烈建議使用SDK的 acquireToken()
方法來繼續瀏覽器中的流程。
當我們初始化 SDK 時,我們需要指定應用程式可支援的挑戰類型。 以下是 SDK 接受的挑戰類型清單:
- OOB (頻外):當您的 iOS/macOS 應用程式可以處理一次性密碼時,請新增此挑戰類型,在此案例中為電子郵件代碼。
- 密碼:當您的應用程式能夠處理密碼型驗證時,請新增此挑戰類型。
當 Microsoft Entra 需要客戶端無法提供的功能時,將回傳 BrowserRequired
錯誤。 例如,假設我們只指定挑戰類型 OOB 來初始化 SDK 實例,但在 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 系統管理中心內,應用程式已設定為「使用者流程:電子郵件搭配 密碼」。
let parameters = MSALNativeAuthSignUpParameters(username: email)
nativeAuth.signUp(parameters: parameters, delegate: self)
func onSignUpStartError(error: MSAL.SignUpStartError) {
if error.isBrowserRequired {
// handle browser required error
}
}
當我們從 SDK 實例呼叫 signUp(parameters: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
}
}
}
傳回的令牌和帳戶與透過原生驗證流程擷取的令牌和帳戶相同。