クイック スタート: Windows デスクトップ アプリでユーザーのサインインと Microsoft Graph の呼び出しを行う
このクイックスタートでは、Windows Presentation Foundation (WPF) アプリケーションでユーザーをサインインし、アクセス トークンを取得して Microsoft Graph API を呼び出す方法を示すコード サンプルをダウンロードして実行します。 ビルドするデスクトップ アプリでは、Proof Key for Code Exchange (PKCE) 標準と組み合わされた認可コード フローが使用されます。
図については、「このサンプルのしくみ」を参照してください。
前提条件
- ユニバーサル Windows プラットフォーム開発ワークロードがインストールされた Visual Studio 2019
クイック スタート アプリを登録してダウンロードする
クイック スタート アプリケーションを開始する方法としては、次の 2 つの選択肢があります。
オプション 1: アプリを登録して自動構成を行った後、コード サンプルをダウンロードする
- Microsoft Entra 管理センターのアプリの登録クイックスタート エクスペリエンスに移動します。
- アプリケーションの名前を入力し、 [登録] を選択します。
- 画面の指示に従ってダウンロードし、1 回クリックするだけで、新しいアプリケーションが自動的に構成されます。
オプション 2:アプリケーションを登録し、アプリケーションとコード サンプルを手動で構成する
手順 1:アプリケーションの登録
ヒント
この記事の手順は、開始するポータルによって若干異なる場合があります。
アプリケーションを登録し、その登録情報をソリューションに手動で追加するには、次の手順を実行します。
- Microsoft Entra 管理センターにサインインします。
- 複数のテナントにアクセスできる場合は、上部のメニューの [設定] アイコン を使い、[ディレクトリとサブスクリプション] メニューからアプリケーションを登録するテナントに切り替えます。
- [ID]>[アプリケーション]>[アプリ登録] の順に進み、[新規登録] を選択します。
- アプリケーションの名前を入力します (例:
Win-App-calling-MsGraph
)。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。 - [サポートされているアカウントの種類] セクションで、 [Accounts in any organizational directory and personal Microsoft accounts (for example, Skype, Xbox, Outlook.com)](任意の組織のディレクトリ内のアカウントと個人用の Microsoft アカウント (例: Skype、Xbox、Outlook.com)) を選択します。
- [登録] を選択して、アプリケーションを作成します。
- [管理] で、 [認証] を選択します。
- [プラットフォームを追加]>[モバイル アプリケーションとデスクトップ アプリケーション] を選択します。
- [リダイレクト URI] セクションで
https://login.microsoftonline.com/common/oauth2/nativeclient
を選択し、 [カスタム リダイレクト URI] セクションにms-appx-web://microsoft.aad.brokerplugin/{client_id}
を追加します。{client_id}
は、登録するアプリケーションのアプリケーション (クライアント) ID です (msal{client_id}://auth
チェック ボックスに表示される GUID)。 - [構成] をクリックします。
手順 2:プロジェクトのダウンロード
ヒント
Windows におけるパスの長さの制限に起因したエラーを防ぐため、ドライブのルートに近いディレクトリをアーカイブの展開先またはリポジトリのクローン先とすることをお勧めします。
手順 3: プロジェクトを構成する
ディスクのルートに近いローカル フォルダー (例: C:\Azure-Samples) に zip ファイルを展開します。
Visual Studio でプロジェクトを開きます。
App.Xaml.cs を編集し、
ClientId
フィールドとTenant
フィールドの値を次のコードに置き換えます。private static string ClientId = "Enter_the_Application_Id_here"; private static string Tenant = "Enter_the_Tenant_Info_Here";
各値の説明:
Enter_the_Application_Id_here
- 登録したアプリケーションのアプリケーション (クライアント) ID。アプリケーション (クライアント) ID の値を見つけるには、Microsoft Entra 管理センターでアプリの [概要] ページに移動します。
Enter_the_Tenant_Info_Here
- 次のいずれかのオプションに設定します。アプリケーションでこの組織のディレクトリ内のアカウントをサポートする場合は、この値をテナント ID またはテナント名に置き換えます (たとえば、contoso.microsoft.com)
アプリケーションで [任意の組織のディレクトリ内のアカウント] がサポートされる場合は、この値を
organizations
に置き換えます。アプリケーションにおいて任意の組織のディレクトリ内のアカウントと個人用の Microsoft アカウントをサポートする場合は、この値を
common
に置き換えます。[ディレクトリ (テナント) ID] と [サポートされているアカウントの種類] の値を見つけるには、Microsoft Entra 管理センターでアプリの [概要] ページに移動します。
手順 4:アプリケーションの実行
Visual Studio でサンプルアプリケーションをビルドして実行するには、[デバッグ] メニュー> の [デバッグ開始] を選択するか、F5 キーを押します。 アプリケーションの Mainwindow.xaml が表示されます。
アプリのメインウィンドウが表示されたら、[Microsoft Graph APIの呼び出し] ボタンを選択します。 Microsoft Entra アカウント (職場または学校アカウント)、 または Microsoft アカウント (live.com、outlook.com) のサインイン情報を使用してサインインを試みます。
アプリケーションを初めて実行する場合は、アプリケーションがユーザープロファイルにアクセスしてサインインできるようにするための同意を求めるメッセージが表示されます。 要求されたアクセス許可に同意すると、正常にログインしたことがアプリケーションに表示されます。 Microsoft Graph API への呼び出しから取得した基本的なトークン情報とユーザーデータが表示されます。
詳細情報
このサンプルのしくみ
MSAL.NET
MSAL (Microsoft.Identity.Client) はユーザーをサインインし、Microsoft ID プラットフォームによって保護されている API へのアクセス用のトークンを要求するために使用するライブラリです。 MSAL は、Visual Studio の "パッケージ マネージャー コンソール" で次のコマンドを実行してインストールできます。
Install-Package Microsoft.Identity.Client -IncludePrerelease
MSAL の初期化
MSAL への参照を追加するには、次のコードを追加します。
using Microsoft.Identity.Client;
続いて、次のコードを使用して MSAL を初期化します。
IPublicClientApplication publicClientApp = PublicClientApplicationBuilder.Create(ClientId)
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
.Build();
各値の説明: | 説明 |
---|---|
ClientId |
Microsoft Entra 管理センターに登録されているアプリケーションの [アプリケーション (クライアント) ID]。 この値は、Microsoft Entra 管理センターのアプリの [概要] ページで確認できます。 |
トークンの要求
MSAL には、トークンの取得に使用する 2 つのメソッド AcquireTokenInteractive
、AcquireTokenSilent
があります。
ユーザー トークンを対話形式で取得する
ユーザーは Microsoft ID プラットフォームの操作を強制される場合があります。その場合、各自の資格情報の検証または同意を行うポップアップ ウィンドウが表示されます。 次に例をいくつか示します。
- ユーザーが初めてアプリケーションにサインインした場合
- パスワードの有効期限が切れているため、ユーザーが資格情報を再入力する必要がある場合
- ご使用のアプリケーションが、ユーザーによる同意が必要なリソースへのアクセスを要求している場合
- 2 要素認証が必須である場合
authResult = await app.AcquireTokenInteractive(_scopes)
.ExecuteAsync();
各値の説明: | 説明 |
---|---|
_scopes |
要求するスコープを含む (Microsoft Graph 用の { "user.read" } またはカスタム Web API 用の { "api://<Application ID>/access_as_user" } など) |
ユーザー トークンを自動で取得する
リソースへのアクセスが必要になるたびに、ユーザーに自分の資格情報を検証させたくない場合があります。 ほとんどの場合は、ユーザーの操作なしにトークンの取得や更新を行います。 最初に AcquireTokenInteractive
メソッドを呼び出した後は、AcquireTokenSilent
メソッドを使用して保護されたリソースにアクセス するトークンを取得することができます。
var accounts = await app.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
authResult = await app.AcquireTokenSilent(scopes, firstAccount)
.ExecuteAsync();
各値の説明: | 説明 |
---|---|
scopes |
要求するスコープを含む (Microsoft Graph 用の { "user.read" } またはカスタム Web API 用の { "api://<Application ID>/access_as_user" } など) |
firstAccount |
キャッシュ内の最初のユーザーを指定する (MSAL は、1 つのアプリで複数のユーザーをサポート)。 |
ヘルプとサポート
サポートが必要な場合、問題をレポートする場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。
次のステップ
アプリケーションや新機能の構築についての完全なステップ バイ ステップ ガイドは、Windows デスクトップ チュートリアルをお試しください。このクイック スタートの完全な説明も含まれています。