了解如何使用 MSAL4J 登入

已完成

MSAL4J 將應用程式設定與 Microsoft 身分識別平台 驗證及憑證取得 API 連接。 本單元說明客戶端建構範例及函式庫在網頁應用程式登入流程中的角色。

適用於 JAVA 的 Microsoft 驗證程式庫

適用於 JAVA 的 Microsoft 驗證程式庫(MSAL4J)使應用程式能以Microsoft身份驗證並取得受保護 API 的憑證。 它支援涉及 Microsoft Entra ID、個人 Microsoft 帳號及 Azure AD B2C 的情境,採用 OAuth 2.0 與 OpenID Connect。

Note

現有的 Azure AD B2C 客戶仍可繼續使用此服務。 自 2025 年 5 月 1 日起,新客戶無法購買,支援至少持續到 2030 年 5 月。 Azure AD B2C P2 已於 2026 年 3 月 15 日停止提供給所有客戶;持續提供的服務支援不涵蓋已淘汰的僅限 P2 功能。

對於新的客戶識別專案,請使用 Microsoft Entra 外部 ID。 本模組的情境涉及 Microsoft Entra 員工團隊租戶,而非 Azure AD B2C 租戶或外部 ID 外部租戶。 詳情請參閱 Azure AD B2C 終止銷售常見問題集。

MSAL4J 支援多種應用程式類型,包括網頁應用程式、背景服務、命令列應用程式及桌面應用程式。 適當的用戶端類型與憑證擷取流程取決於應用程式的環境。

機密客戶端代表伺服器應用程式

MSAL 區分了無法可靠保密應用程式憑證的 公開用戶端與能使用安全持有憑證自我驗證的 機密用戶端。 伺服器端的 Java 網頁應用程式是機密客戶端。

以下說明片段構建了該客戶端。 大寫名稱是配置的佔位符,而非真正的識別碼或秘密。 匯入、相關應用程式碼和異常處理都沒有顯示。

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);
ConfidentialClientApplication app = ConfidentialClientApplication
                                        .builder(CLIENT_ID, credential)
                                        .authority(AUTHORITY)
                                        .build();

該片段連接三個輸入端:

Input Meaning
CLIENT_ID 註冊時的應用程式識別碼。
CLIENT_SECRET 一個用來存放伺服器機密資料的佔位符。 這說明了一個認證處理站,而不是建立或內嵌祕密的要求。
AUTHORITY 識別提供者 URL 與登入對象。 在單一租戶情境中,它會識別所選的 Microsoft Entra 租戶。

ClientCredentialFactory 建立一個憑證物件,建構者將該憑證與應用程式的用戶端 ID 及權限關聯起來。 呼叫 build() 會建構 MSAL 客戶端;它不會登入使用者或將瀏覽器傳送到任何地方。

MSAL 在授權碼流程中的角色

機密客戶端負責驗證應用程式,而瀏覽器互動則負責驗證使用者。 應用程式協調流程的以下部分:

Phase MSAL API 應用責任
開始瀏覽器登入 getAuthorizationRequestUrl 建立授權請求,並將瀏覽器重新導向至該請求。
兌換授權碼 acquireToken 和 AuthorizationCodeParameters 處理回撥、驗證回應,並將收到的代碼交換代幣。
取得一個令牌以供後續的 API 呼叫 acquireTokenSilently 和 SilentParameters 提供帳戶及適當的權杖快取內容,並處理需要使用者互動的案例。

在此 Web 應用程式中,回呼會收到授權碼,而不是 Microsoft Graph 存取權杖。 程式碼兌換是透過伺服器間對代幣端點的請求進行。

解讀認證結果

成功兌換兌換碼會回傳一個 IAuthenticationResult。 在此 OpenID Connect 情境中,結果會提供應用程式的 ID 權杖及請求 API 的存取權杖。 同時也提供管理帳戶及代幣期限的資訊。

識別碼權杖包含身分識別宣告;存取權杖可讓要求存取其預定的 API。 ID 憑證不能取代 Microsoft Graph 存取憑證。 MSAL4J 會取得權杖,但後續的業務 API 呼叫則由應用程式或特定 API 的 SDK 發出。

下一個單元則透過註解 servlet 程式碼來執行這些職責。 MSAL 概述提供了關於支援情境及令牌管理的額外背景說明。