共用方式為


教學課程:在 Android 應用程式中支援 Web 後援

本教學課程會示範 isBrowserRequired() 錯誤如何發生,以及如何加以解決。 公用程式方法 isBrowserRequired() 會檢查原生驗證不足以以功能和安全方式完成驗證流程的各種案例後援機制的需求。

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

  • 檢查 isBrowserRequired()
  • 控制代碼 isBrowserRequired()

必要條件

Web 後援

針對原生驗證不足以完成使用者驗證流程的案例使用 Web 後援機制

當您初始化 Android SDK 時,您可以指定行動應用程式所支援的挑戰類型,例如 oob密碼

如果您的用戶端應用程式不支援 Microsoft Entra 所需的挑戰類型,Microsoft Entra 的回應會表示用戶端應用程式需要在瀏覽器中繼續驗證流程。 例如,您可以使用 oob 挑戰類型來初始化 SDK,但在 Microsoft Entra 系統管理中心中,您會使用具有密碼驗證方法的電子郵件來設定應用程式。

在此情況下,公用程式方法 isBrowserRequired() 會傳回 True。

範例流程

讓我們看看傳回 isBrowserRequired() 的範例流程,以及如何加以處理:

  1. 在初始化期間傳遞至 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
      }
    } 
    
  2. 在 Microsoft Entra 系統管理中心,設定您的使用者流程 以使用 以密碼作為驗證方法的電子郵件

  3. 使用 SDK 的 signUp(username) 方法來啟動註冊流程。 由於 Microsoft Entra 預期 密碼oob 挑戰類型,但您只使用 oob 來設定 SDK,您會取得通過 isBrowserRequired() 檢查的 SignUpError

  4. 若要檢查及處理 isBrowserRequired(),請使用下列程式碼片段:

    val actionResult = authClient.signUp( 
        username = email 
    ) 
    if (actionResult is SignUpError && actionResult.isBrowserRequired()) { 
        // Handle "browser required" error
    } 
    

    程式碼表示無法透過原生驗證完成驗證流程,而且必須使用瀏覽器。

處理 isBrowserRequired() 錯誤

若要處理此錯誤,用戶端應用程式必須啟動瀏覽器並重新啟動驗證流程。 您可以使用 Microsoft 驗證連結庫 (MSAL) acquireToken() 方法來完成。

若要這樣做,請使用下列步驟:

  1. 若要將重新導向 URI 新增至您稍早註冊的應用程式,請使用 新增平台重新導向 URL 中的步驟。

  2. 若要更新用戶端應用程式的設定檔,請使用 在 SDK 的設定中設定重新導向 URI 中的步驟。

  3. 使用下列程式碼片段,透過使用 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.
        )
    } 
    

安全性權杖,即識別碼權杖、存取權杖和重新整理權杖,您透過原生驗證流程取得的權杖,與您透過瀏覽器委派流程取得的權杖相同。