使用使用者認證進行 Azure 驗證

本文探討 Azure 身分識別連結庫如何使用使用者提供的認證支援 Microsoft Entra 令牌驗證。 此支援可透過本文所討論的一組 TokenCredential 實作來提供。

本文涵蓋下列主題:

如需針對使用者認證驗證問題進行疑難解答,請參閱 針對使用者認證驗證進行疑難解答。

裝置程式代碼認證

裝置程式代碼認證會以互動方式驗證具有有限 UI 的裝置上的使用者。 其運作方式是提示使用者在應用程式嘗試驗證時,流覽已啟用瀏覽器之電腦上的登入URL。 然後,用戶會輸入指示中提及的裝置程序代碼,以及其登入認證。 成功驗證時,要求驗證的應用程式會在執行時成功在裝置上進行驗證。

如需詳細資訊,請參閱 Microsoft 身分識別平台 和 OAuth 2.0 裝置授權授與流程

啟用裝置程式代碼流程的應用程式

若要透過裝置程式代碼流程驗證使用者,請使用下列步驟:

  1. 移至 Azure 入口網站 中的 Microsoft Entra 識別碼,然後尋找您的應用程式註冊。
  2. 流覽至 [ 驗證] 區段。
  3. 在 [建議的重新導向 URI] 下,檢查以 結尾的 /common/oauth2/nativeclientURI。
  4. 在[預設客戶端類型] 底下,針對 Treat application as a public client選取 yes

這些步驟可讓應用程式進行驗證,但仍沒有將您登入 Microsoft Entra ID 的許可權,或代表您存取資源。 若要解決此問題,請流覽至 [API 許可權],然後啟用 Microsoft Graph 和您想要存取的資源,例如 金鑰保存庫。

當您第一次登入時,您也必須是租用戶的系統管理員,才能授與應用程式同意。

如果您無法在 Microsoft Entra ID 上設定裝置程式代碼流程選項,則可能需要您的應用程式成為多租使用者。 若要讓應用程式成為多租使用者,請流覽至 [驗證 ] 面板,然後選取 [任何組織目錄中的帳戶]。 然後,針對 [將應用程式視為公用用戶端] 選取 []。

使用裝置程式代碼流程驗證用戶帳戶

下列範例示範如何使用 DeviceCodeCredential IoT 裝置上的 ,從適用於 JavaAzure 金鑰保存庫 秘密客戶端連結庫驗證 SecretClient

/**
 * Authenticate with device code credential.
 */
DeviceCodeCredential deviceCodeCredential = new DeviceCodeCredentialBuilder()
    .challengeConsumer(challenge -> {
    // Lets the user know about the challenge.
    System.out.println(challenge.getMessage());
    }).build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your Key Vault name>.vault.azure.net")
    .credential(deviceCodeCredential)
    .buildClient();

互動式瀏覽器認證

此認證會以互動方式使用預設系統瀏覽器來驗證使用者,並可讓您使用自己的認證來驗證應用程式,以提供順暢的驗證體驗。

啟用互動式瀏覽器 OAuth 2 流程的應用程式

若要使用 InteractiveBrowserCredential,您必須在 Microsoft Entra ID 中註冊應用程式,並具有代表使用者登入的許可權。 請遵循先前的裝置程式代碼流程步驟來註冊您的應用程式。 如先前所述,租用戶的系統管理員必須先授與應用程式同意,才能讓任何使用者帳戶登入。

您可能會在 中 InteractiveBrowserCredentialBuilder注意到,需要重新導向 URL。 將重新導向 URL 新增至已註冊 Microsoft Entra 應用程式的 [驗證] 區段底下的 [重新導向 URI] 子區段。

在瀏覽器中以互動方式驗證用戶帳戶

下列範例示範如何使用 從 azure-security-keyvault-secrets 用戶端連結庫驗證 。SecretClientInteractiveBrowserCredential

/**
 * Authenticate interactively in the browser.
 */
InteractiveBrowserCredential interactiveBrowserCredential = new InteractiveBrowserCredentialBuilder()
    .clientId("<your app client ID>")
    .redirectUrl("YOUR_APP_REGISTERED_REDIRECT_URL")
    .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your Key Vault name>.vault.azure.net")
    .credential(interactiveBrowserCredential)
    .buildClient();

用戶名稱密碼認證

有助於 UsernamePasswordCredential 使用不需要多重要素驗證的使用者認證來驗證公用用戶端應用程式。 下列範例示範如何使用 從 azure-security-keyvault-secrets 用戶端連結庫驗證 。SecretClientUsernamePasswordCredential 使用者不得開啟多重要素驗證。

/**
 * Authenticate with username, password.
 */
UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder()
    .clientId("<your app client ID>")
    .username("<your username>")
    .password("<your password>")
    .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your Key Vault name>.vault.azure.net")
    .credential(usernamePasswordCredential)
    .buildClient();

如需詳細資訊,請參閱 Microsoft 身分識別平台 和 OAuth 2.0 資源擁有者密碼認證

下一步

本文涵蓋使用使用者認證進行驗證。 這種形式的驗證是您可以在適用於 Java 的 Azure SDK 中驗證的多種方式之一。 下列文章說明其他方式:

如果您遇到與使用者認證驗證相關的問題,請參閱 針對使用者認證驗證進行疑難解答。

掌握驗證之後,請參閱 在 Azure SDK for Java 中設定記錄,以取得 SDK 所提供的記錄功能相關信息。