次の方法で共有


チュートリアル: 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
    } 
    

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

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

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