練習 - 使用 MSAL 授與 Microsoft Graph API 的存取權

已完成

在此練習中,您會設定具有權限的應用程式,並使用 MSAL 從 Microsoft Graph (MS Graph) API 存取使用者設定檔資訊。

將 Microsoft Graph 權限新增至應用程式註冊

受 Microsoft Entra ID 保護的 Web 服務會定義一組權限,用於存取該服務所公開的 API 功能和資料。 應用程式必須先要求使用者核准相關權限,才能代表使用者存取資料或採取行動。 您可以從 Azure 入口網站將這些 API 權限指派給您的應用程式註冊。 以下是將 Microsoft Graph API 權限指派給應用程式的步驟。

  1. 在 [應用程式註冊] 畫面上,選取 [API 權限],以新增應用程式所需的 API 存取權。

    顯示 Azure 入口網站上已使用 Microsoft Entra ID 註冊的應用程式的 API 權限窗格功能表的螢幕擷取畫面。

    • 選取新增權限

    • 確認已選取 [Microsoft API] 索引標籤。

    • 在 [常用的 Microsoft API] 區段中,選取 [Microsoft Graph],然後選取 [委派的權限]

    • 在 [委派的權限] 區段中,向下捲動並選取清單中的 User.Read。 這是用來從 https://graph.microsoft.com/v1.0/me 端點存取登入使用者資訊的特定權限。

    • 選取 [新增權限]

      顯示 Azure 入口網站上已使用 Microsoft Entra ID 註冊的應用程式的 API 權限窗格的螢幕擷取畫面。

執行應用程式

您可以嘗試對您在上一個練習中執行的應用程式進行圖形 API 呼叫。

  1. 請開啟瀏覽器,然後瀏覽至 http://localhost:8080/msal4j-servlet-graph/。 如果您尚未登入,系統會將您重新導向至使用 Microsoft Entra ID 登入。 成功登入時,您應該會看到如下圖所示的頁面。

    顯示在成功登入範例應用程式後顯示於頁面上用來呼叫圖形的按鈕的螢幕擷取畫面。

  2. 選取 [呼叫圖形] 以呼叫 Microsoft Graph 的 /me 端點,並查看顯示的使用者詳細資料。

Microsoft Graph 存取碼概觀

您可以在範例專案的 CallGraphServlet.java 目錄下的 servlet 類別 中找到用來存取 Microsoft Graph API 的程式碼。 它會定義 /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 會在登入時向使用者顯示同意對話方塊。 如果使用者同意一或多個範圍,則會編碼到產生的 access_token 中,在驗證回應中傳回。

  2. 當使用者瀏覽至 /call_graph 時,應用程式會建立 IGraphServiceClient 的執行個體 (Microsoft Graph SDK Java),並傳入登入使用者的存取權杖。 在此,Graph 用戶端會將存取權杖放在其要求的授權標頭中。 然後,應用程式會要求 Graph 用戶端呼叫 Microsoft Graph 的 /me 端點,以產生現行登入使用者的詳細資料。

    以下是應用程式開發人員為了存取 /me 端點所需撰寫的所有程式碼,前提是他們已具有 User.Read 範圍的 Graph 服務有效的存取權杖。

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