クイック スタート: ユニバーサル Windows プラットフォーム アプリでユーザーのサインインと Microsoft Graph の呼び出しを行う
このクイックスタートでは、ユニバーサル Windows プラットフォーム (UWP) アプリケーションでユーザーをサインインし、アクセス トークンを取得して Microsoft Graph API を呼び出す方法を示すコード サンプルをダウンロードして実行します。
図については、「このサンプルのしくみ」を参照してください。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Visual Studio
Note
MSAL.NET バージョン 4.61.0 以降では、ユニバーサル Windows プラットフォーム (UWP)、Xamarin Android、Xamarin iOS はサポートされていません。 UWP アプリケーションを WINUI などの最新のフレームワークに移行することをお勧めします。 この非推奨化については、「Announcing the Upcoming Deprecation of MSAL.NET for Xamarin and UWP」で詳しく説明しています。
クイック スタート アプリを登録してダウンロードする
クイック スタート アプリケーションを開始する方法としては、次の 2 つの選択肢があります。
オプション 1: アプリを登録して自動構成を行った後、コード サンプルをダウンロードする
- Microsoft Entra 管理センターの [アプリの登録] クイックスタート エクスペリエンスに移動します。
- アプリケーションの名前を入力し、 [登録] を選択します。
- 指示に従って新しいアプリケーションをダウンロードし、自動構成します。
オプション 2:アプリケーションを登録し、アプリケーションとコード サンプルを手動で構成する
手順 1:アプリケーションの登録
ヒント
この記事の手順は、開始するポータルによって若干異なる場合があります。
アプリケーションを登録し、その登録情報をソリューションに追加するには、次の手順を実行します。
- Microsoft Entra 管理センターにサインインします。
- 複数のテナントにアクセスできる場合は、上部のメニューの [設定] アイコン を使い、[ディレクトリとサブスクリプション] メニューからアプリケーションを登録するテナントに切り替えます。
- [ID]>[アプリケーション]>[アプリ登録] の順に進み、[新規登録] を選択します。
- アプリケーションの名前を入力します (例:
UWP-App-calling-MsGraph
)。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。 - [サポートされているアカウントの種類] セクションで、 [Accounts in any organizational directory and personal Microsoft accounts (for example, Skype, Xbox, Outlook.com)](任意の組織のディレクトリ内のアカウントと個人用の Microsoft アカウント (例: Skype、Xbox、Outlook.com)) を選択します。
- [登録] を選択してアプリケーションを作成し、後の手順で使用するアプリケーション (クライアント) ID を記録します。
- [管理] で、 [認証] を選択します。
- [プラットフォームを追加]>[モバイル アプリケーションとデスクトップ アプリケーション] を選択します。
- [リダイレクト URI] で
https://login.microsoftonline.com/common/oauth2/nativeclient
を選択します。 - [構成] をクリックします。
手順 2:プロジェクトのダウンロード
ヒント
Windows におけるパスの長さの制限に起因したエラーを防ぐため、ドライブのルートに近いディレクトリをアーカイブの展開先またはリポジトリのクローン先とすることをお勧めします。
手順 3: プロジェクトを構成する
.zip アーカイブを、ドライブのルートに近いローカル フォルダーに抽出します。 たとえば、C:\Azure-Samples に抽出します。
Visual Studio でプロジェクトを開きます。 [ユニバーサル Windows プラットフォーム開発] ワークロードをインストールします。また、SDK コンポーネントのインストールを求められた場合は、個々のコンポーネントをインストールします。
MainPage.Xaml.cs で、
ClientId
変数の値を、先ほど登録したアプリケーションのアプリケーション (クライアント) ID に変更します。private const string ClientId = "Enter_the_Application_Id_here";
アプリケーション (クライアント) ID は、Microsoft Entra 管理センターのアプリの [概要] ペインで確認できます ( [ID] >[アプリケーション] >[アプリの登録] > {自分のアプリの登録})。
パッケージに使用する新しい自己署名テスト証明書を作成して選択します。
- ソリューション エクスプローラーで、Package.appxmanifest ファイルをダブルクリックします。
- [パッケージ]>[証明書の選択]>[作成] を選択します。
- パスワードを入力し、 [OK] を選択します。 Native_UWP_V2_TemporaryKey.pfx という名前の証明書が作成されます。
- [OK] を選択して [証明書の選択] ダイアログを閉じ、ソリューション エクスプローラーに Native_UWP_V2_TemporaryKey.pfx が表示されることを確認します。
- [ソリューション エクスプローラー] で、 [Native_UWP_V2] プロジェクトを右クリックし、 [プロパティ] を選択します。
- [署名] を選択し、 [厳密な名前のキー ファイルを選択してください] ボックスの一覧から、作成した .pfx を選択します。
手順 4:アプリケーションの実行
ローカル コンピューターでサンプル アプリケーションを実行するには、次の手順に従います。
Visual Studio ツールバーで、適切なプラットフォーム (おそらく ARM ではなく、x64 または x86) を選択します。 ターゲット デバイスが [デバイス] から [ローカル コンピューター] に変わります。
[デバッグ]>[デバッグなしで開始] を選択します。
開発者モードを有効にするよう求められた場合は、まず開発者モードを有効にしたうえで、 [デバッグなしで開始] を再度選択し、アプリを起動してください。
アプリのウィンドウが表示されたら、 [Call Microsoft Graph API](Microsoft Graph API を呼び出す) ボタンを選択し、資格情報を入力して、アプリケーションから要求されたアクセス許可に同意してください。 成功した場合、Microsoft Graph API を呼び出すことによって取得したデータとトークン情報が表示されます。
このサンプルのしくみ
MSAL.NET
MSAL (Microsoft.Identity.Client) は、ユーザーをサインインし、セキュリティ トークンを要求するために使用されるライブラリです。 セキュリティ トークンは、Microsoft ID プラットフォームによって保護されている API にアクセスするために使用されます。 MSAL は、Visual Studio の "パッケージ マネージャー コンソール" で次のコマンドを実行してインストールできます。
Install-Package Microsoft.Identity.Client
MSAL の初期化
MSAL への参照を追加するには、次のコードを追加します。
using Microsoft.Identity.Client;
その後、MSAL は次のコードを使用して初期化されます。
public static IPublicClientApplication PublicClientApp;
PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.Build();
ClientId
の値は、Microsoft Entra 管理センターに登録されているアプリの アプリケーション (クライアント) IDです。 この値は、Microsoft Entra 管理センターのアプリの [概要] ページで確認できます。
トークンの要求
MSAL には、UWP アプリでトークンを取得するための 2 つのメソッド AcquireTokenInteractive
および AcquireTokenSilent
があります。
ユーザー トークンを対話形式で取得する
ユーザーは Microsoft ID プラットフォームの操作を強制される場合があります。その場合、各自の資格情報の検証または同意を行うポップアップ ウィンドウが表示されます。 次に例をいくつか示します。
- ユーザーが初めてアプリケーションにサインインした場合
- パスワードの有効期限が切れているため、ユーザーが資格情報を再入力する必要がある場合
- ご使用のアプリケーションが、ユーザーによる同意が必要なリソースへのアクセスを要求している場合
- 2 要素認証が必須である場合
authResult = await PublicClientApp.AcquireTokenInteractive(scopes)
.ExecuteAsync();
scopes
パラメーターには、要求するスコープが格納されます (Microsoft Graph の { "user.read" }
、カスタム Web API の { "api://<Application ID>/access_as_user" }
など)。
ユーザー トークンを自動で取得する
最初の AcquireTokenInteractive
メソッドを呼び出した後、AcquireTokenSilent
メソッドを使用して、保護されたリソースにアクセスするためのトークンを取得します。 リソースへのアクセスを必要とするたびに自分の資格情報を確認するようユーザーに要求したくありません。 ほとんどの場合は、ユーザーの操作なしにトークンの取得や更新を求めます。
var accounts = await PublicClientApp.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
authResult = await PublicClientApp.AcquireTokenSilent(scopes, firstAccount)
.ExecuteAsync();
scopes
には、要求するスコープが格納されます (Microsoft Graph の{ "user.read" }
、カスタム Web API の{ "api://<Application ID>/access_as_user" }
など)。firstAccount
は、キャッシュ内の最初のユーザー アカウントを指定します (MSAL は、1 つのアプリで複数のユーザーをサポート)。
ヘルプとサポート
サポートが必要な場合、問題をレポートする場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。
次のステップ
アプリケーションや新機能の構築についての完全なステップ バイ ステップ ガイドは、Windows デスクトップ チュートリアルをお試しください。このクイック スタートの完全な説明も含まれています。