Microsoft Graph要求を解釈する

完了済み

このチュートリアルでは、Java Web アプリケーションがサインインしているユーザーのプロファイルをMicrosoft Graphから読み取る方法について説明します。 要求、Javaフラグメント、および応答は、実際の API 要求を送信するためのラボや要件ではなく、説明付きのサンプルです。

参照サーブレットのサンプルでは、委任された User.Readを使用します。 その aad.scopes 構成プロパティは、サインイン時に認証コードが要求する Config.SCOPESにその値を提供します。

アプリ登録の API アクセス許可 の一覧には、構成されたアクセス許可が記述されています。 次のスクリーンショットは、登録を変更する指示ではなく、そのビューの例です。

アプリケーション登録の [API アクセス許可] ページのスクリーンショット。

承認コンテキストについては、次の 3 つの事実で説明します。

  • このコードは、Microsoft Graph への委任されたアクセス許可 User.Read を要求します。
  • テナント ポリシーと既存の許可に応じて、ユーザーまたは承認された管理者から同意を得ることができます。
  • 登録にアクセス許可を追加しても、それ自体が同意を与えたり、コードの要求されたスコープを変更したりすることはありません。

このサンプルではサインイン時にこのアクセス許可を要求するため、Graph 要求ごとに同意プロンプトが表示されるという想定は別にありません。

HTTP 要求を読み取る

次の HTTP サンプルは、プロファイル要求の重要な部分を示しています。 <graph-access-token> は説明プレースホルダーであり、ツールを取得または貼り付けるトークンではありません。

GET /v1.0/me HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer <graph-access-token>

要求は HTTPS を使用して https://graph.microsoft.com/v1.0/meに到達します。 /me は、委任されたコンテキストでサインインしているユーザーを識別します。 Authorization ヘッダーには、Microsoft Graphを目的としたアクセス トークンが含まれています。アプリケーションの ID トークン、承認コード、またはクライアント シークレットは含まれません。

User.Read は、サインインしているユーザーのプロファイルを読み取る操作を示す場合に十分です。 他のユーザーの情報への任意のアクセスは承認されません。 ユーザー取得 API リファレンス では、エンドポイントとアクセス許可について説明します。

同等の Java SDK を読み取る

履歴サンプルのCallGraphServletは、独自の/call_graph ルートを処理し、Microsoft Graph SDK を使用して API 要求を行います。 次のフラグメントは、トークンの取得が成功した後の呼び出しを示しています。

User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();

GraphHelper は、組み込みの MSAL4J API ではなく、サンプルによって定義されたヘルパーです。 認証プロバイダーがサンプルの認証済みコンテキストからサインインユーザーの Graph アクセス トークンを提供する GraphServiceClient を作成します。 contextAdapter は、現在の要求をそのアプリケーション コンテキストに接続します。

この SDK バージョンでは、me()サインインしているユーザー エンドポイントを選択buildRequest()、要求を作成し、get()送信して応答を Microsoft Graph User モデルに逆シリアル化します。 フラグメントは、周囲のサーブレット、インポート、セッション処理、およびエラー処理を省略します。これは完全なアプリケーションではありません。

Note

このフラグメントは、Java 5.5.0 構文用のサンプルのMicrosoft Graph SDK の履歴を反映しています。 v6 SDK は、要求パターン、クライアント構築、認証統合、およびモデル アクセスを変更します。 Microsoft Graph Java SDK v6 アップグレード ガイドでは、これらの違いについて説明します。 v6 のみの要求式は、サンプルの v5 依存関係およびヘルパー コードと互換性がありません。

説明的な応答を解釈する

短い応答例には、次のプロファイル フィールドを含めることができました。 値は架空のものであり、学習者が再現する必要がある出力ではありません。

{
  "displayName": "Avery Rivera",
  "jobTitle": "Service specialist",
  "mail": "avery@example.com"
}

アプリケーションでは、これらのフィールドを使用してプロファイル情報を表示できます。 実際の値はユーザーのディレクトリ プロファイルによって異なります。フィールドは存在しないか null にすることができます。 プロファイル フィールドは、雇用の証明でも、アプリケーションの承認ポリシーに代わるものでもない。

責任の全体的な分割は重要です。Microsoft Entra IDは、該当するアクセス許可と同意規則の下でトークンを発行し、MSAL4J がそのトークンを取得し、Graph SDK または HTTP クライアントがそれを使用してデータを要求します。 Graph クライアントを構築するだけでは、アクセス権は付与されません。