教學課程:在 Android 應用程式中支援 Web 後援
本教學課程會示範 isBrowserRequired()
錯誤如何發生,以及如何加以解決。 公用程式方法 isBrowserRequired()
會檢查原生驗證不足以以功能和安全方式完成驗證流程的各種案例後援機制的需求。
在本教學課程中,您會了解如何:
- 檢查
isBrowserRequired()
- 控制代碼
isBrowserRequired()
必要條件
- 完成在範例原生 Android 行動應用程式中登入使用者的步驟。 本文會顯示如何使用租用戶設定來執行您設定的範例 Android。
- 完成 教學課程:使用電子郵件一次性密碼新增登入和登出 中的步驟。
Web 後援
針對原生驗證不足以完成使用者驗證流程的案例使用 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(username)
方法來啟動註冊流程。 由於 Microsoft Entra 預期 密碼 和 oob 挑戰類型,但您只使用 oob 來設定 SDK,您會取得通過isBrowserRequired()
檢查的SignUpError
。若要檢查及處理
isBrowserRequired()
,請使用下列程式碼片段:val actionResult = authClient.signUp( username = email ) if (actionResult is SignUpError && actionResult.isBrowserRequired()) { // Handle "browser required" error }
程式碼表示無法透過原生驗證完成驗證流程,而且必須使用瀏覽器。
處理 isBrowserRequired() 錯誤
若要處理此錯誤,用戶端應用程式必須啟動瀏覽器並重新啟動驗證流程。 您可以使用 Microsoft 驗證連結庫 (MSAL) acquireToken()
方法來完成。
若要這樣做,請使用下列步驟:
若要將重新導向 URI 新增至您稍早註冊的應用程式,請使用 新增平台重新導向 URL 中的步驟。
若要更新用戶端應用程式的設定檔,請使用 在 SDK 的設定中設定重新導向 URI 中的步驟。
使用下列程式碼片段,透過使用
acquireToken()
方法來取得權杖:val actionResult = authClient.signUp( username = email ) 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 參考。
- 了解 挑戰類型。