使用 Microsoft 驗證程式庫登入使用者

已完成

您已向 Microsoft Entra ID 註冊 Web 應用程式。 現在,您已準備好新增驗證碼以在您的應用程式中登入使用者,並想要使用可為您處理驗證詳細資料的 SDK。 在此單元中,您會了解適用於 Java 的 Microsoft 驗證程式庫 (MSAL4J),及其如何協助進行驗證。

適用於 JAVA 的 Microsoft 驗證程式庫

適用於 Java 的 Microsoft 驗證程式庫 (MSAL4J) 可讓應用程式使用 Microsoft 身分識別 (Microsoft Entra ID、Microsoft 帳戶和 Azure Active Directory B2C 帳戶) 登入使用者或應用程式,以及取得權杖來呼叫 Microsoft API 或您自己使用 Microsoft Entra ID 註冊的 API。 此程式庫是使用業界標準 OAuth2 和 OpenID Connect 通訊協定所建置的。

此程式庫提供便利的 API,可讓不同類型的應用程式使用 Microsoft Entra ID 進行驗證:

  • Web 應用程式
  • 精靈服務
  • 命令列應用程式
  • 傳統型應用程式

將 MSAL 物件初始化

若要開始使用 MSAL,您必須在應用程式程式碼中初始化和設定 MSAL 物件。

MSAL 會將用戶端應用程式顯示為公用用戶端和機密用戶端,兩者的區別在於能否安全地向授權伺服器進行驗證,並維護其用戶端認證的機密性。

機密用戶端應用程式是在伺服器上執行的應用程式 (Web 應用程式、Web API 應用程式,甚或服務/精靈應用程式)。 機密用戶端可以保存設定時間的應用程式秘密。

您可以用下列方式建立機密用戶端的執行個體:

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);
ConfidentialClientApplication app = ConfidentialClientApplication
                                        .builder(CLIENT_ID, credential)
                                        .authority(AUTHORITY)
                                        .build();
  • CLIENT_ID:用戶端識別碼是在註冊應用程式時,Microsoft Entra ID 指派給應用程式的唯一應用程式 (用戶端) 識別碼。
  • CLIENT_SECRET:機密用戶端應用程式的用戶端密碼,建立於註冊應用程式時。
  • AUTHORITY:授權單位是一個 URL,指出 MSAL 可從中要求權杖的目錄。 這是由應用程式的識別提供者執行個體和登入對象所組成。

透過 MSAL 取得驗證權杖

MSAL 提供的 acquireToken 方法可起始驗證流程,並傳回包含驗證權杖的 AuthenticationResult

當使用者完成登入時,就會在驗證結果中傳回識別碼權杖,其中包含一些基本驗證宣告,例如使用者主體名稱、電子郵件等等。

以下是透過 MSAL 取得權杖的範例:

final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
                                                    .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES))
                                                    .build();

final IAuthenticationResult result = app.acquireToken(authParams).get();
  • REDIRECT_URI:重新導向 URI 是識別提供者將傳回安全性權杖的目標 URI。 這必須符合 Microsoft Entra 應用程式註冊中的重新導向 URI。
  • SCOPES:範圍是應用程式所要求的權限。 一般來說,openid profile offline_access 這三個範圍即足以接收使用者登入的識別碼權杖回應,而 MSAL 依預設會設定這些範圍。

在起始使用者登入流程,並呼叫 API 以存取資料時,請在您的應用程式中使用 acquireToken 方法。