演習 - MSAL を使用して Microsoft Graph API へのアクセスを承認する

完了

この演習では、アクセス許可を使用してアプリケーションを構成し、MSAL を使用して Microsoft Graph (MS Graph) API のユーザー プロファイル情報にアクセスします。

アプリの登録に Microsoft Graph のアクセス許可を追加する

Microsoft Entra ID によってセキュリティ保護された Web サービスで定義されているアクセス許可のセットを使用することで、そのサービスによって公開されている API 機能とデータにアクセスできます。 アプリケーションでデータにアクセスしたり、ユーザーに代わって行動したりするには、これらのアクセス許可の承認をユーザーに要求する必要があります。 これらの API アクセス許可は、Azure portal でアプリの登録に割り当ることができます。 Microsoft Graph API のアクセス許可をアプリケーションに割り当てる手順は次のとおりです。

  1. [アプリケーションの登録] 画面で、[API のアクセス許可] を選択し、アプリケーションに必要な API へのアクセスを追加します。

    Azure portal で Microsoft Entra ID に登録されているアプリの [API アクセス許可] ウィンドウのメニューを示すスクリーンショット。

    • [アクセス許可の追加] を選択します。

    • [Microsoft API] タブが選択されていることを確認します。

    • [よく使用される Microsoft API] セクションで、[Microsoft Graph][委任されたアクセス許可] の順に選択します。

    • [委任されたアクセス許可] セクションで、下へスクロールし、一覧の [User.Read] を選択します。 この特定のアクセス許可は、サインインしているユーザーの情報に https://graph.microsoft.com/v1.0/me エンドポイントからアクセスするためのものです。

    • [アクセス許可の追加] を選択します.

      Azure portal で Microsoft Entra ID に登録されているアプリの [API アクセス許可] ウィンドウを示すスクリーンショット。

アプリケーションの実行

前の演習から実行しているアプリケーションで、Graph API の呼び出しを試すことができます。

  1. ブラウザーを開き、http://localhost:8080/msal4j-servlet-graph/ に移動します。 まだサインインしていない場合は、"Microsoft Entra ID でのサインイン" にリダイレクトされます。 サインインに成功すると、次の画像に示すようなページが表示されます。

    サンプル アプリケーションに正常にサインインした後でページに表示されるグラフを呼び出すためのボタンを示すスクリーンショット。

  2. [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 のアクセス コードの詳細を次に示します。

  1. ./src/main/resources/authentication.properties ファイルでは、aad.scopes の値は User.Read スコープに設定されます。

    スコープにより、アプリケーションで要求されているアクセス レベルが Microsoft Entra ID に示されて、アプリ登録のアクセス許可にマップされます。 Microsoft Entra ID は、要求されたスコープに基づいて、サインイン時にユーザーに同意ダイアログを表示します。 ユーザーが 1 つまたは複数のスコープに同意した場合、認証応答で返される結果の access_token 内にエンコードされます。

  2. ユーザーが /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();