代理驗證會使用系統驗證代理程式來收集使用者認證,以驗證應用程式。 系統驗證代理程式是在使用者電腦上執行的應用程式,可管理所有連線帳戶的驗證交握和權杖維護。
代理驗證提供下列優點:
- 啟用單一 Sign-On(SSO): 讓應用程式簡化使用者與 Microsoft Entra ID 的認證方式,並保護Microsoft Entra ID刷新令牌免於外洩與濫用。
- 增強安全性: 許多安全性增強功能隨代理程式一起提供,而不需要更新應用程式邏輯。
- 增強的功能支援: 在代理的幫助下,開發人員可以存取豐富的作業系統和服務功能。
- 系統整合: 使用代理程式的應用程式可隨插即用,並內建帳戶選擇器,讓使用者快速選擇現有帳戶,而不是一遍又一遍地重新輸入相同的憑證。
- 代幣保護: 確保更新權杖與裝置系結,並讓應用程式取得與裝置系結的存取權杖。 請參閱 權杖保護。
Windows 提供名為 Web Account Manager (WAM) 的認證代理。 WAM 使身份提供者如 Microsoft Entra ID 能原生接入作業系統,並為應用程式提供安全的登入服務。 代理驗證可讓應用程式執行互動式登入認證所允許的所有作業。
支持個人Microsoft帳戶和公司或學校帳戶。 在支援的 Windows 版本中,預設的瀏覽器介面被更流暢的認證體驗取代,類似內建的 Windows 應用程式。
設定應用程式以進行代理驗證
若要在應用程式中啟用代理驗證,請遵循下列步驟:
在 Azure 入口網站,前往 Microsoft Entra ID,並於左側選單選擇 App registrations。
選取您的應用程式的註冊,然後選取 [驗證]。
透過平台設定,將適當的重新導向 URI 新增至您的應用程式註冊:
在 [平台組態] 底下,選取 [+ 新增平臺]。
在 [設定平台] 底下,選取應用程式類型 (平台) 的磚以設定其設定,例如 行動和桌面應用程式。
在 自訂重定向 URI 中,輸入以下重定向 URI:
ms-appx-web://Microsoft.AAD.BrokerPlugin/{your_client_id}請將應用程式註冊的
{your_client_id}窗格中的應用程式(用戶端)ID 替換。選取[],然後設定[]。
若要深入瞭解,請參閱 將重新導向 URI 新增至應用程式註冊。
回到 [驗證] 窗格的 [進階設定] 底下,針對 [允許公用用戶端流程] 選取 [是]。
選取 [儲存] 以套用變更。
要授權特定資源的應用程式,請前往該資源,選擇 API 權限,並啟用 Microsoft Graph 及其他你想存取的資源。
這很重要
當您第一次登入時,您也必須是租戶的系統管理員,才能授予應用程式同意。
指派角色
要成功執行 App 程式碼並使用經紀驗證,請使用 Azure 角色基礎存取控制(RBAC) 授權使用者帳號權限。 為你的使用者帳號指派一個適當的角色,以支援相關 Azure 服務。 例如:
- Azure Blob Storage:指派 Storage Account Data Contributor 角色。
- Azure Key Vault:指派Key Vault 機密管理員角色。
若指定應用程式,必須設定 API 權限來設定 user_impersonation Access Azure Storage(前一節第 6 步)。 此 API 權限允許應用程式在登入時獲得同意後,代表已登入使用者存取 Azure 儲存空間。
實作程式碼
Azure Identity 函式庫支援透過 InteractiveBrowserCredential 進行經紀式認證。
azure-identity-broker 函式庫提供InteractiveBrowserBrokerCredentialBuilder,該InteractiveBrowserCredential能夠使用系統認證代理。 例如,若要在Java控制台應用程式中使用經紀驗證,與 SecretClient 進行Azure Key Vault認證,請依照以下步驟操作:
將
azure-identity-broker相依性加入你的pom.xml檔案。<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity-broker</artifactId> </dependency>取得父視窗的參考,帳戶選擇器對話方塊應該顯示在其上。 例如,請參見 「取得窗戶把手」。
建立
InteractiveBrowserCredential的實例,使用InteractiveBrowserBrokerCredentialBuilder:import com.azure.identity.InteractiveBrowserCredential; import com.azure.identity.broker.InteractiveBrowserBrokerCredentialBuilder; import com.azure.security.keyvault.secrets.SecretClient; import com.azure.security.keyvault.secrets.SecretClientBuilder; import com.azure.security.keyvault.secrets.models.KeyVaultSecret; long windowHandle = getWindowHandle(); // See examples below InteractiveBrowserCredential credential = new InteractiveBrowserBrokerCredentialBuilder() .setWindowHandle(windowHandle) .useDefaultBrokerAccount() .build(); SecretClient client = new SecretClientBuilder() .vaultUrl("https://<your-key-vault-name>.vault.azure.net") .credential(credential) .buildClient(); KeyVaultSecret secret = client.getSecret("MySecret"); System.out.println("Retrieved secret: " + secret.getName());
在前述範例中, useDefaultBrokerAccount 選擇以預設系統帳號進行靜默、經紀式的認證流程。 這樣,用戶就不必重複選擇同一個帳戶。 如果靜默的經紀驗證失敗,則 InteractiveBrowserCredential 會退回到互動式的經紀驗證。
下列螢幕擷取畫面顯示替代互動式代理驗證體驗:
裝個窗戶把手
當你使用InteractiveBrowserCredential進行互動式認證時,你需要一個父視窗的句柄,確保驗證對話框正確地顯示在發送請求的視窗上。
JavaFX 應用程式
對於 JavaFX 應用程式,使用 JNA(Java Native Access)來取得視窗控制碼:
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
public long getWindowHandle(Stage stage) {
WinDef.HWND hwnd = User32.INSTANCE.FindWindow(null, stage.getTitle());
return Pointer.nativeValue(hwnd.getPointer());
}
主控台應用程式
對於 Windows 上的主控台應用程式,請使用 JNA 取得主控台視窗的控制代碼。
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinDef;
WinDef.HWND hwnd = Kernel32.INSTANCE.GetConsoleWindow();
long windowHandle = Pointer.nativeValue(hwnd.getPointer());
相關內容
透過使用 Azure Identity 函式庫 - 在本地開發期間,使用開發者帳號驗證 Java 應用程式至 Azure 服務
- Azure 身分識別函式庫 for Java
- Azure 身份代理程式庫(Java 版本)