解讀 Microsoft Graph 請求

已完成

本教學說明 Java 網頁應用程式如何從 Microsoft Graph 讀取已登入使用者的個人資料。 以下的請求、Java 片段和回應都是帶有說明的範例,並非實驗室或必須發送真實 API 請求的條件。

參考服務組範例使用委派的 User.Read。 其 aad.scopes 設定特性提供該值至 Config.SCOPES,驗證碼在登入時會請求此值。

應用程式註冊的 API 權限 清單描述了已設定的權限。 以下截圖是該視圖的範例,並非更改註冊的指令。

應用程式註冊的 API 權限頁面截圖。

有三個事實解釋了授權的背景:

  • 將 User.Read 委託給 Microsoft Graph 的程式碼要求。
  • 同意可由使用者本人或授權管理員取得,視租戶政策及現有授權而定。
  • 在註冊中新增權限本身並不代表授權或更改程式碼中請求的範圍。

範例在登入時請求此權限,因此不假設每個 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。 它會建立一個 GraphServiceClient,其認證提供者會從範例的已驗證內容中提供已登入使用者的 Graph 存取權杖。 contextAdapter 將當前請求與該應用程式上下文連結。

在此 SDK 版本中,會me()選擇已登入的使用者端點,buildRequest()建立請求,然後get()發送,並將回應反序列化成 Microsoft Graph User 模型。 該片段省略了周圍的 servlet、匯入、會話處理及錯誤處理;這不是一份完整的申請。

Note

此片段反映了歷史範例的 Microsoft Graph SDK for Java 5.5.0 語法。 v6 SDK 會改變請求模式、客戶端建構、認證整合及模型存取。 Microsoft Graph Java SDK v6 升級指南有說明這些差異。 僅 v6 的請求表達式與範例的 v5 依賴性及輔助程式碼不相容。

解讀一個說明性回應

簡短的範例回應可以包含以下剖析欄位。 這些數值是虛構的,並非學習者需要重現的輸出。

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

應用程式可利用這些欄位呈現個人資料資訊。 實際值取決於使用者的目錄設定檔,欄位可能缺失或為空。 個人檔案欄位並非就業證明,也不是應用程式授權政策的替代品。

整體職責分工很重要:Microsoft Entra ID 依據適用的許可與同意規則發出權杖,MSAL4J 取得該權杖,Graph SDK 或 HTTP 用戶端則使用該憑證請求資料。 僅僅建構圖譜客戶端並不代表存取權限。