演習 - MSAL を使用して Microsoft Graph API へのアクセスを承認する
この演習では、アクセス許可を使用してアプリケーションを構成し、MSAL を使用して Microsoft Graph (MS Graph) API のユーザー プロファイル情報にアクセスします。
アプリの登録に Microsoft Graph のアクセス許可を追加する
Microsoft Entra ID によってセキュリティ保護された Web サービスで定義されているアクセス許可のセットを使用することで、そのサービスによって公開されている API 機能とデータにアクセスできます。 アプリケーションでデータにアクセスしたり、ユーザーに代わって行動したりするには、これらのアクセス許可の承認をユーザーに要求する必要があります。 これらの API アクセス許可は、Azure portal でアプリの登録に割り当ることができます。 Microsoft Graph API のアクセス許可をアプリケーションに割り当てる手順は次のとおりです。
[アプリケーションの登録] 画面で、[API のアクセス許可] を選択し、アプリケーションに必要な API へのアクセスを追加します。
アプリケーションの実行
前の演習から実行しているアプリケーションで、Graph API の呼び出しを試すことができます。
ブラウザーを開き、
http://localhost:8080/msal4j-servlet-graph/
に移動します。 まだサインインしていない場合は、"Microsoft Entra ID でのサインイン" にリダイレクトされます。 サインインに成功すると、次の画像に示すようなページが表示されます。[Graph の呼び出し] を選択して、Microsoft Graph の
/me
エンドポイントに対する呼び出しを行い、表示されるユーザーの詳細を確認します。
Microsoft Graph にアクセスするためのコードの概要
Microsoft Graph API にアクセスするためのコードは、サンプル プロジェクトの msal4j/callgraphwebapp/ ディレクトリにあるサーブレット クラス CallGraphServlet.java
で確認できます。 そこでエンドポイント /call_graph
が定義されているアプリケーションにより、Microsoft Graph API の https://graph.microsoft.com/v1.0/me
エンドポイントに対して承認された呼び出しが行われ、サインインしているユーザーのプロファイル情報が取得されます。 Graph のアクセス コードの詳細を次に示します。
./src/main/resources/authentication.properties ファイルでは、
aad.scopes
の値は User.Read スコープに設定されます。スコープにより、アプリケーションで要求されているアクセス レベルが Microsoft Entra ID に示されて、アプリ登録のアクセス許可にマップされます。 Microsoft Entra ID は、要求されたスコープに基づいて、サインイン時にユーザーに同意ダイアログを表示します。 ユーザーが 1 つまたは複数のスコープに同意した場合、認証応答で返される結果の
access_token
内にエンコードされます。ユーザーが
/call_graph
に移動すると、アプリケーションによって IGraphServiceClient (Microsoft Graph SDK Java) のインスタンスが作成されて、サインインしたユーザーのアクセス トークンが渡されます。 これ以降、Graph クライアントにより、要求の Authorization ヘッダーにアクセス トークンが設定されます。 その後、アプリによって Graph クライアントに、Microsoft Graph の/me
エンドポイントを呼び出して、現在サインインしているユーザーの詳細を生成することが要求されます。Graph サービスに対する
User.Read
スコープの有効なアクセス トークンが既に存在する場合、アプリケーション開発者が/me
エンドポイントにアクセスするために記述する必要があるのは以下のコードだけです。//CallGraphServlet.java User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();