チュートリアル: 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 }
このコードは、ネイティブ認証 SDK を使用して認証フローを完了できないこと、またブラウザーを使用する必要があることを示します。
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. ) }
ネイティブ認証フローを通じて取得するセキュリティ トークン (ID トークン、アクセス トークン、更新トークン) は、ブラウザーで委任されたフローを介して取得するトークンと同じです。
関連するコンテンツ
- iOS サンプル アプリを実行する方法を確認する。
- メールのワンタイム パスコードを使用したネイティブ認証 API リファレンスについて詳しく知る。
- チャレンジの種類を確認する。