次の方法で共有


チュートリアル: Android アプリでの Web フォールバックのサポート

適用対象: 灰色の X 記号がある白い円。 従業員テナント 白いチェック マーク記号がある緑の円。 外部テナント (詳細情報)

このチュートリアルでは、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(parameters) 方法を使用してサインアップ フローを開始します。 Microsoft Entra は SignUpErrorisBrowserRequired() のチャレンジタイプを想定していますが、あなたは oob のみで SDK を構成したため、 チェックを通過する を受け取ります。

  4. isBrowserRequired() を確認して処理するには、次のコード スニペットを使用します。

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

    このコードは、ネイティブ認証 SDK を使用して認証フローを完了できないこと、またブラウザーを使用する必要があることを示します。

isBrowserRequired() エラーを処理する

このエラーを処理するには、クライアント アプリは、ブラウザーを起動して認証フローを再起動する必要があります。 Microsoft 認証ライブラリ (MSAL) acquireToken() メソッドを使用して実行できます。

そのためには、次の手順を行ってください。

  1. 前の手順で登録したアプリにリダイレクト URI を追加するには、「プラットフォーム リダイレクト URL を追加する」の手順を使用します。

  2. クライアント アプリの構成ファイルを更新するには、「再インストールの構成」の手順を使用します。

  3. SDK の構成の URI](../external-id/customers/sample-mobile-app-android-kotlin-sign-in.md#configure-the-sample-android-mobile-application)。

  4. 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.
        )
    } 
    

ネイティブ認証フローを通じて取得するセキュリティ トークン (ID トークン、アクセス トークン、更新トークン) は、ブラウザーで委任されたフローを介して取得するトークンと同じです。