適用於:
外部租用戶 (深入瞭解)
本教學課程示範如何發生 isBrowserRequired() 錯誤,以及如何加以解決。 公用程式方法 isBrowserRequired() 檢查原生驗證不足以以功能和安全方式完成驗證流程的各種案例的後援機制需求。
在本教學課程中,您會:
- 檢查
isBrowserRequired() - 處理
isBrowserRequired()
先決條件
- 在範例原生 Android 行動應用程式中,完成 中的登入使用者步驟。 本文說明如何使用您的租用戶設定來運行一個您可以配置的範例 Android。
- 完成 教學課程中步驟:使用電子郵件的一次性密碼來新增登入和登出。
網頁備援
針對原生驗證不足以完成使用者驗證流程的案例,請使用 Web 後援機制 。
當您初始化 Android SDK 時,您可以指定行動應用程式所支援的挑戰類型,例如 oob 和 密碼。
如果您的用戶端應用程式不支援Microsoft Entra 所需的挑戰類型,Microsoft Entra 的回應表示用戶端應用程式需要在瀏覽器中繼續驗證流程。 例如,您會使用 oob 挑戰類型初始化 SDK,但在 Microsoft Entra 系統管理中心中,您會使用具有密碼驗證方法的電子郵件來設定應用程式。
在此情況下,公用程式方法 isBrowserRequired() 會傳回 true。
範例流程
讓我們看看傳回 isBrowserRequired()的範例流程,以及如何加以處理:
在初始化時傳遞至 SDK 的 JSON 設定檔中,新增只有 oob 挑戰類型,如以下代碼段所示:
PublicClientApplication.createNativeAuthPublicClientApplication( requireContext(), R.raw.native_auth_config // JSON configuration file )native_auth_config.json組態具有下列代碼段:{ "client_id" : "{Enter_the_Application_Id_Here}", "authorities" : [ { "type": "CIAM", "authority_url": "https://{Enter_the_Tenant_Subdomain_Here}.ciamlogin.com/{Enter_the_Tenant_Subdomain_Here}.onmicrosoft.com/" } ], "challenge_types" : ["oob"], "logging": { "pii_enabled": false, "log_level": "INFO", "logcat_enabled": true } }在 Microsoft Entra 系統管理中心中,設定您的使用者流程,以電子郵件與密碼作為驗證方法。
使用 SDK 的
signUp(parameters)方法來啟動註冊流程。 您取得通過SignUpError檢查的isBrowserRequired(),因為 Microsoft Entra 預期 密碼 和 oob 挑戰類型,但您只以 oob設定 SDK。若要檢查及處理
isBrowserRequired(),請使用下列代碼段:val parameters = NativeAuthSignUpParameters(username = email) val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { // Handle "browser required" error }程式代碼表示無法透過原生驗證完成驗證流程,而且必須使用瀏覽器。
Handle isBrowserRequired()錯誤
若要處理此錯誤,用戶端應用程式必須啟動瀏覽器並重新啟動驗證流程。 您可以使用 Microsoft 認證程式庫(MSAL)acquireToken() 方法來達成。
若要這樣做,請使用下列步驟:
若要將重新導向 URI 新增至您稍早註冊的應用程式,請使用 新增平臺重新導向 URL 中的步驟。
要更新客戶端應用程式的設定檔,請使用 「配置範例應用程式」中的步驟。
使用下列代碼段,透過使用
acquireToken()方法來取得令牌:val parameters = NativeAuthSignUpParameters(username = email) val actionResult: SignUpResult = authClient.signUp(parameters) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { authClient.acquireToken( AcquireTokenParameters( AcquireTokenParameters.Builder() .startAuthorizationFromActivity(requireActivity()) .withScopes(getScopes()) .withCallback(getAuthInteractiveCallback()) ) // Result will contain account and tokens retrieved through the browser. ) }
安全性令牌,也就是標識符令牌、存取令牌和更新令牌,您透過原生驗證流程取得的,與透過瀏覽器委派流程取得的令牌相同。
相關內容
- 瞭解如何執行 iOS 範例應用程式
- 使用電子郵件單次密碼 探索原生驗證 API 參考。
- 瞭解 挑戰類型。