次の方法で共有


サンプル Android (Kotlin) アプリでユーザーをサインインさせ、保護された Web API を呼び出す

このガイドでは、ユーザーをサインインさせ、ASP.NET Core Web API を呼び出すように、サンプル Android モバイル アプリケーションを構成する方法を見ていきます。

この記事では、次のタスクを実行します。

  • Microsoft Entra 管理センターでアプリケーションを登録します。
  • プラットフォーム リダイレクト URL を追加します。
  • パブリック クライアント フローを有効にします。
  • 顧客テナントの詳細に独自の Microsoft Entra 外部 ID を使用するように Android 構成コードサンプル ファイルを更新します。
  • サンプルの Android モバイル アプリケーションを実行してテストします。
  • 保護された Web API を呼び出します。

前提条件

  • Android Studio

  • 外部テナント。 お持ちでない場合は、無料試用版にサインアップしてください。

  • 少なくとも 1 つのスコープ (委任されたアクセス許可) と 1 つのアプリ ロール (アプリケーション アクセス許可) を発行する API 登録 (ToDoList.Read など)。 まだ行っていない場合は、サンプル Android モバイル アプリでの API の呼び出しに関する記事の手順に従って、機能する保護された ASP.NET Core Web API を用意します。 次の手順を完了してください。

    • Web API アプリケーションを登録する
    • API スコープを構成する
    • アプリ ロールを構成する
    • 省略可能な要求の構成
    • サンプル Web API を複製またはダウンロードする
    • サンプル Web API を構成して実行する

アプリケーションの登録

Microsoft Entra を使用してアプリケーションでユーザーをサインインできるようにするには、作成するアプリケーションを Microsoft Entra 外部 ID に認識させる必要があります。 アプリの登録によって、アプリと Microsoft Entra の間に信頼関係が確立されます。 アプリケーションを登録すると、外部 ID によって、アプリケーション (クライアント) ID と呼ばれる一意識別子が生成されます。これは、認証要求を作成するときにアプリを識別するために使用される値です。

Microsoft Entra 管理センターにアプリを登録する方法を次の手順に示します。

  1. アプリケーション開発者以上として Microsoft Entra 管理センターにサインインします。

  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコン を使用し、[ディレクトリとサブスクリプション] メニューから外部テナントに切り替えます。

  3. [ID]>[アプリケーション]>[アプリの登録] を参照します。

  4. [+ 新規登録] を選択します。

  5. 表示される [アプリケーションの登録] ページで、次のようにします。

    1. アプリのユーザーに表示されるわかりやすいアプリケーションの [名前] を入力します (例: ciam-client-app)。
    2. [サポートされているアカウントの種類] で、 [この組織のディレクトリ内のアカウントのみ] を選択します。
  6. [登録] を選択します。

  7. 登録が成功すると、アプリケーションの [概要] ペインが表示されます。 アプリケーションのソース コードで使用するアプリケーション (クライアント) ID を記録します。

プラットフォーム リダイレクト URL を追加する

アプリの登録にアプリの種類を指定するには、次の手順に従います。

  1. [管理] で、 [認証] を選択します。
  2. [プラットフォーム構成] ページで、[プラットフォームの追加] を選択し、[Android] オプションを選択します。
  3. プロジェクトのパッケージ名を入力します。 サンプル コードをダウンロードした場合、この値は com.azuresamples.msaldelegatedandroidkotlinsampleapp です。
  4. [Android アプリの構成] ペインの [署名ハッシュ] セクションで、[開発用署名ハッシュの生成] を選択します。これは開発環境ごとに変わります。お使いのターミナルでオペレーティング システムの KeyTool コマンドをコピーして実行します。
  5. KeyTool によって生成された署名ハッシュを入力します。
  6. [構成] をクリックします。
  7. [Android の構成] ペインから [MSAL 構成] をコピーし、後でアプリを構成するために保存します。
  8. 完了 を選択します。

パブリック クライアント フローを有効にする

アプリをパブリック クライアントとして識別するには、次の手順に従います。

  1. [管理] で、 [認証] を選択します。

  2. [詳細設定] で、[パブリック クライアント フローを許可する] に対して [はい] を選択します。

  3. [保存] を選択して変更を保存します。

アプリケーションを登録すると、User.Read アクセス許可が割り当てられます。 ただし、テナントが外部テナントであるため、顧客ユーザー自身はこのアクセス許可に同意できません。 管理者は、テナント内のすべてのユーザーに代わってこのアクセス許可に同意する必要があります。

  1. [アプリの登録] ページで、作成したアプリケーション ("ciam-client-app" など) を選択して、その [概要] ページを開きます。

  2. [管理] の下にある [API のアクセス許可] を選択します。

    1. [<ご使用のテナント名> に管理者の同意を与えます] を選択してから、[はい] を選択します。
    2. [最新の情報に更新] を選択し、そのアクセス許可の [状態] に "<テナント名> に付与されました" と表示されていることを確認します。

Android サンプル アプリに Web API のアクセス許可を付与する

クライアント アプリと Web API の両方を登録し、スコープを作成して API を公開したら、次の手順に従って、API に対するクライアントのアクセス許可を構成できます。

  1. [アプリの登録] ページで、作成したアプリケーション ("ciam-client-app" など) を選択して、その [概要] ページを開きます。

  2. [管理] の下にある [API のアクセス許可] を選択します。

  3. [構成されたアクセス許可] の下で [アクセス許可の追加] を選択します。

  4. [所属する組織で使用している API] タブを選択します。

  5. API の一覧で、API (ciam-ToDoList-api など) を選択します。

  6. [委任されたアクセス許可] オプションを選択します。

  7. アクセス許可の一覧で [ToDoList.Read, ToDoList.ReadWrite] を選択します (必要に応じて検索ボックスを使用します)。

  8. [アクセス許可の追加] ボタンを選択します

  9. この時点で、アクセス許可が正しく割り当てられます。 ただし、このテナントは顧客のテナントであるため、コンシューマー ユーザー自身がこれらのアクセス許可に同意することはできません。 これに対処するには、管理者がテナント内のすべてのユーザーに代わってこれらのアクセス許可に同意する必要があります。

    1. [<ご使用のテナント名> に管理者の同意を与えます] を選択してから、[はい] を選択します。

    2. [最新の情報に更新] を選択し、両方のアクセス許可の [状態] に "<テナント名> に付与されました" と表示されていることを確認します。

  10. [Configured permissions] (構成されたアクセス許可) の一覧でToDoList.ReadToDoList.ReadWrite のアクセス許可を一度に 1 つずつ選択し、後で使用するためにアクセス許可の完全な URI をコピーします。 完全なアクセス許可 URI は、api://{clientId}/{ToDoList.Read} または api://{clientId}/{ToDoList.ReadWrite} のようになります。

サンプル Android モバイル アプリをクローンする

サンプル アプリケーションを取得するには、GitHub から複製するか、.zip ファイルとしてダウンロードします。

  • サンプルをクローンするには、コマンド プロンプトを開き、プロジェクトを作成する場所に移動し、次のコマンドを入力します。

    git clone https://github.com/Azure-Samples/ms-identity-ciam-browser-delegated-android-sample
    

サンプル Android モバイル アプリを構成する

認証と Web API リソースへのアクセスを有効にするには、これらの手順に従ってサンプルを構成します。

  1. Android Studio で、クローンしたプロジェクトを開きます。

  2. /app/src/main/res/raw/auth_config_ciam.json ファイルを開きます。

  3. 次のプレースホルダーを見つけます。

    • Enter_the_Application_Id_Here を、前に登録したアプリのアプリケーション (クライアント) ID に置き換えます。
    • Enter_the_Redirect_Uri_Here。先ほどプラットフォーム リダイレクト URL を追加したときにダウンロードした Microsoft Authentication Library (MSAL) 構成ファイルの redirect_uri の値に置き換えます。
    • Enter_the_Tenant_Subdomain_Here を、ディレクトリ (テナント) サブドメインに置き換えます。 たとえば、テナントのプライマリ ドメインが contoso.onmicrosoft.com の場合は、contoso を使用します。 テナントのサブドメイン名を知らない場合は、テナントの詳細を読み取る方法をご確認ください
  4. /app/src/main/AndroidManifest.xml ファイルを開きます。

  5. 次のプレースホルダーを見つけます。

    • ENTER_YOUR_SIGNATURE_HASH_HERE、前にプラットフォーム リダイレクト URL を追加したときに生成したシグネチャ ハッシュでそれを置換します。
  6. /app/src/main/java/com/azuresamples/msaldelegatedandroidkotlinsampleapp/MainActivity.kt ファイルを開きます。

  7. WEB_API_BASE_URL という名前のプロパティを見つけ、URL を Web API に設定します。

  8. scopes という名前のプロパティを見つけて、「Android サンプル アプリに Web API のアクセス許可を付与する」で記録したスコープを設定します。

    private const val scopes = "" // Developers should set the respective scopes of their web API here. For example, private const val scopes = "api://{clientId}/{ToDoList.Read} api://{clientId}/{ToDoList.ReadWrite}"
    

アプリが構成され、実行する準備ができました。

サンプルの Android モバイル アプリケーションを実行してテストする

アプリをビルドして実行するには、次のステップに従います。

  1. ツール バーの実行構成メニューからアプリを選択します。

  2. ターゲット デバイス メニューで、アプリを実行するデバイスを選択します。

    デバイスが構成されていない場合は、Android Emulator を使用するための Android 仮想デバイスを作成するか、物理 Android デバイスを接続する必要があります。

  3. [実行] ボタンを選択します。

  4. [対話的にトークンを取得] を選択して、アクセス トークンを要求します。

  5. [API - GET の実行] を選択し、前に設定した ASP.NET Core Web API を呼び出します。 Web API の呼び出しが成功すると HTTP 200 が返されますが、HTTP 403 は未承認のアクセスを意味します。