分享方式:


快速入門:使用應用程式的身分識別取得權杖,並從 JAVA 主控台應用程式呼叫 Microsoft Graph API

歡迎! 這可能不是您預期的頁面。 當我們處理修正程式時,此連結應會將您導向至正確的文章:

快速入門:從 JAVA 精靈應用程式取得權杖並呼叫 Microsoft Graph

當我們努力解決問題時,也對您的不便深感抱歉,並感謝您的耐心等候。

在本快速入門中,您會下載並執行程式碼範例,該範例會示範 Java 應用程式如何使用應用程式的身分識別來取得存取權杖,以呼叫 Microsoft Graph API 及顯示目錄中的使用者清單。 此程式碼範例會示範自動作業或 Windows 服務如何使用應用程式識別來執行,而不是以使用者的身分識別執行。

必要條件

若要執行此範例,您需要:

下載並設定快速入門應用程式

步驟 1:在 Azure 入口網站中設定應用程式

若要讓本快速入門中的程式碼範例能夠運作,您需要建立用戶端密碼,並新增 Graph API 的 User.Read.All 應用程式權限。

已設定 您的應用程式會使用這些屬性進行設定。

步驟 2:下載 Java 專案

注意

Enter_the_Supported_Account_Info_Here

如果您嘗試在此時執行應用程式,您將會收到「HTTP 403 - 禁止」錯誤:Insufficient privileges to complete the operation。 發生此錯誤是因為任何 僅限應用程式的許可權 都需要系統管理員同意:目錄的雲端應用程式管理員必須同意您的應用程式。 請根據您的角色選取下列其中一個選項:

雲端應用程式系統管理員

如果您是租使用者的雲端應用程式管理員,請移至 [API 許可權 ] 頁面,選取 [ 授與系統管理員同意Enter_the_Tenant_Name_Here

標準使用者

如果您是租用戶的標準使用者,則必須要求雲端應用程式管理員授與應用程式的管理員同意。 若要這樣做,請提供下列 URL 給管理員:

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

步驟 4:執行應用程式

您可以從 IDE 執行 ClientCredentialGrant.java 的 main 方法,直接測試範例。

從殼層或命令列:

$ mvn clean compile assembly:single

這會在您的 /targets 目錄中產生 msal-client-credential-secret-1.0.0.jar 檔案。 使用您的 Java 可執行檔執行此動作,如下所示:

$ java -jar msal-client-credential-secret-1.0.0.jar

執行之後,應用程式應該會顯示已設定租用戶中的使用者清單。

重要

此快速入門應用程式會使用用戶端密碼,將自己識別為機密用戶端。 由於用戶端密碼會以純文字形式新增至您的專案檔,因此,基於安全考量,在考慮將應用程式當作生產應用程式之前,建議您使用憑證,而非用戶端密碼。 如需關於如何使用憑證的詳細資訊,請在相同的 GitHub 存放庫 (但位於第二個資料夾 msal-client-credential-certificate) 中參閱此範例的這些指示

其他相關資訊

MSAL Java

MSAL Java 是程式庫,用來登入使用者並要求權杖,該權杖是用來存取受 Microsoft 身分識別平台保護的 API。 如前所述,本快速入門會使用應用程式本身的身分識別 (而非委派的權限) 來要求權杖。 此案例所使用的驗證流程稱為用戶端認證 OAuth 流程。 如需如何搭配使用 MSAL Java 與精靈應用程式的詳細資訊,請參閱這篇文章

請對應用程式中的 pom.xml (Maven) 或 build.gradle (Gradle) 檔案進行下列變更,以使用 Maven 或 Gradle 來管理您的相依性,進而將 MSAL4J 新增至您的應用程式。

在 pom.xml 中:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.0.0</version>
</dependency>

在 build.gradle 中:

compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'

MSAL 初始化

將下列程式碼新增至要使用 MSAL4J 的檔案頂端,以將參考新增至 MSAL for Java:

import com.microsoft.aad.msal4j.*;

接著,使用下列程式碼將 MSAL 初始化:

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);

ConfidentialClientApplication cca =
        ConfidentialClientApplication
                .builder(CLIENT_ID, credential)
                .authority(AUTHORITY)
                .build();
其中: 描述
CLIENT_SECRET 在 Azure 入口網站中為應用程式建立的用戶端密碼。
CLIENT_ID 是註冊於 Azure 入口網站中的應用程式所具備的應用程式 (用戶端) 識別碼。 您可以在 Azure 入口網站的應用程式 [概觀] 頁面中找到此值。
AUTHORITY 供使用者用於驗證的 STS 端點。 若為公用雲端,通常是 https://login.microsoftonline.com/{tenant},其中 {tenant} 是租用戶的名稱或租用戶識別碼。

要求權杖

若要使用應用程式的身分識別來要求權杖,請使用 acquireToken 方法:

IAuthenticationResult result;
     try {
         SilentParameters silentParameters =
                 SilentParameters
                         .builder(SCOPE)
                         .build();

         // try to acquire token silently. This call will fail since the token cache does not
         // have a token for the application you are requesting an access token for
         result = cca.acquireTokenSilently(silentParameters).join();
     } catch (Exception ex) {
         if (ex.getCause() instanceof MsalException) {

             ClientCredentialParameters parameters =
                     ClientCredentialParameters
                             .builder(SCOPE)
                             .build();

             // Try to acquire a token. If successful, you should see
             // the token information printed out to console
             result = cca.acquireToken(parameters).join();
         } else {
             // Handle other exceptions accordingly
             throw ex;
         }
     }
     return result;
其中: 描述
SCOPE 包含所要求的範圍。 針對機密用戶端,這應該使用類似 {Application ID URI}/.default 的格式,以指出所要求的範圍是 Azure 入口網站中所設定應用程式物件中以靜態方式定義的範圍 (若為 Microsoft Graph,{Application ID URI} 會指向 https://graph.microsoft.com)。 自訂 Web API {Application ID URI} 的定義是在 Azure 入口網站的應用程式註冊區段下。

說明與支援 

如果您需要協助、想要回報問題,或想要深入了解您的支援選項,請參閱 開發人員的協助與支援

下一步

若要深入了解精靈應用程式,請參閱案例登陸頁面。