演習 - MSAL.NET を使用して対話型認証を実装する

完了

この演習では、次のアクションを実行する方法について学習します。

  • Microsoft ID プラットフォームにアプリケーションを登録する
  • MSAL.NET で PublicClientApplicationBuilder クラスを使用する
  • コンソール アプリケーションでトークンを対話的に取得する

前提条件

新しいアプリケーションの登録

  1. ポータル (https://portal.azure.com) にサインインします。

  2. Microsoft Entra ID を検索して選択します。

  3. [管理][アプリの登録]>[新規登録] の順に選択します。

  4. [アプリケーションの登録] ページが表示されたら、以下のアプリケーションの登録情報を入力します。

    フィールド
    名前 az204appreg
    サポートされているアカウントの種類 [この組織ディレクトリのみに含まれるアカウント] を選択します。
    リダイレクト URI (省略可能) [パブリック クライアント/ネイティブ (モバイルとデスクトップ)] を選択し、右側のボックスに「http://localhost」と入力します。
  5. 登録 を選択します。

Microsoft Entra ID によってアプリケーションに一意のアプリケーション (クライアント) ID が割り当てられ、アプリケーションの「概要」ページが表示されます。

コンソール アプリケーションをセットアップする

  1. Visual Studio Code を起動し、[ターミナル][新しいターミナル] の順に選択してターミナルを開きます。

  2. プロジェクト用のフォルダーを作成し、フォルダーに移動します。

    md az204-auth
    cd az204-auth
    
  3. .NET コンソール アプリを作成します。

    dotnet new console
    
  4. az204-auth フォルダーを Visual Studio Code で開きます。

    code . -r
    

コンソール アプリをビルドする

このセクションでは、必要なパッケージとコードをプロジェクトに追加します。

パッケージの追加とステートメントの使用

  1. Visual Studio Code のターミナルで、Microsoft.Identity.Client パッケージをプロジェクトに追加します。

    dotnet add package Microsoft.Identity.Client
    
  2. Program.cs ファイルを開き、using ステートメントを追加して Microsoft.Identity.Client を含め、非同期操作を有効にします。

    using System.Threading.Tasks;
    using Microsoft.Identity.Client;
    
  3. 非同期を有効にするように Main メソッドを変更します。

    public static async Task Main(string[] args)
    

対話型認証のためのコードを追加する

  1. アプリケーション (クライアント) ID とディレクトリ (テナント) ID を保持するための 2 つの変数が必要です。 これらの値はポータルからコピーできます。 次のコードを追加し、それらの文字列値をポータルからの適切な値に置き換えます。

    private const string _clientId = "APPLICATION_CLIENT_ID";
    private const string _tenantId = "DIRECTORY_TENANT_ID";
    
  2. PublicClientApplicationBuilder クラスを使用して認可コンテキストを構築します。

    var app = PublicClientApplicationBuilder
        .Create(_clientId)
        .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
        .WithRedirectUri("http://localhost")
        .Build();
    
    コード 説明
    .Create clientID から PublicClientApplicationBuilder を作成します。
    .WithAuthority ADFS サーバーに対応する既知の権限を追加します。 このコードでは、パブリック クラウドを指定し、登録したアプリのテナントを使用していました。

トークンを取得する

az204appreg アプリを登録したときに、そのアプリにより、Microsoft Graph に対する API アクセス許可 user.read が自動的に生成されました。 そのアクセス許可を使用してトークンを取得します。

  1. トークン要求のアクセス許可スコープを設定します。 PublicClientApplicationBuilder の下に次のコードを追加します。

    string[] scopes = { "user.read" };
    
  2. トークンを要求し、その結果をコンソールに書き出すためのコードを追加します。

    AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
    
    Console.WriteLine($"Token:\t{result.AccessToken}");
    

完成したアプリケーションを確認する

Program.cs ファイルの内容は、次の例のようになります。

using System;
using System.Threading.Tasks;
using Microsoft.Identity.Client;

namespace az204_auth
{
    class Program
    {
        private const string _clientId = "APPLICATION_CLIENT_ID";
        private const string _tenantId = "DIRECTORY_TENANT_ID";

        public static async Task Main(string[] args)
        {
            var app = PublicClientApplicationBuilder
                .Create(_clientId)
                .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
                .WithRedirectUri("http://localhost")
                .Build(); 
            string[] scopes = { "user.read" };
            AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();

            Console.WriteLine($"Token:\t{result.AccessToken}");
        }
    }
}

アプリケーションの実行

  1. Visual Studio Code ターミナルで、dotnet build を実行してエラーを調べてから、dotnet run でアプリを実行します。

  2. アプリによって既定のブラウザーが開かれ、認証するアカウントを選択するよう求められます。 複数のアカウントが一覧表示されている場合は、アプリで使用されるテナントに関連付けられているものを選択します。

  3. 登録されているアプリに対して初めて認証された場合は、そのアカウントに関連付けられているデータをアプリで読み取ることを承認するよう求める [要求されているアクセス許可] という通知が表示されます。 [承諾] を選択します。

    Select **Accept** to grant the permission.

  4. コンソールに次の例のような結果が表示されます。

    Token:  eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....