ユーザー資格情報を使用した Azure 認証

この記事では、ユーザーの入力した資格情報による Microsoft Entra トークン認証が、Azure Identity ライブラリでどのようにサポートされているかについて説明します。 このサポートは、この記事で説明する一連の TokenCredential 実装によって可能になります。

この記事に含まれるサブジェクトは次のとおりです。

ユーザー資格情報認証の問題のトラブルシューティングについては、「ユーザー資格情報認証のトラブルシューティング」を参照してください。

デバイス コードの資格情報

デバイス コードの資格情報は、UI が制限されているデバイスでユーザーを対話形式で認証するものです。 これは、アプリケーションが認証を試みるときに、ブラウザー対応のコンピューターでサインイン URL にアクセスするようにユーザーに求めることで機能します。 そこでユーザーは、指示に記載されているデバイス コードを、サインイン資格情報とともに入力します。 認証が成功すると、認証を要求したアプリケーションは、それが実行されているデバイスで正常に認証されます。

詳細については、「Microsoft ID プラットフォームと OAuth 2.0 デバイス許可付与フロー」をご覧ください。

アプリケーションのデバイス コード フローを有効にする

ユーザーをデバイス コード フローで認証するには、次の手順に従います。

  1. Azure Portal で Microsoft Entra ID に移動し、アプリ登録を見つけます。
  2. [認証] セクションに移動します。
  3. [推奨されるリダイレクト URI] で、/common/oauth2/nativeclient で終わる URI をオンにします。
  4. [既定のクライアントの種類]| で、[Treat application as a public client] に [yes] を選択します。

これらの手順によってアプリケーションは認証されますが、まだ Microsoft Entra ID にサイン インするためのアクセス許可や自分の代わりにリソースにアクセスしたりする権限はありません。 この問題に対処するには、[API 権限] に移動し、Microsoft Graph と、Key Vault などのアクセスするリソースを有効にします。

また、初めてサイン インするときは、アプリケーションに同意を付与するためにテナントの管理者である必要もあります。

Microsoft Entra ID でデバイス コード フロー オプションを構成できない場合は、アプリがマルチテナントにする必要がある場合があります。 アプリをマルチテナントにするには、[認証] パネルに移動してから、[任意の組織のディレクトリ内のアカウント] を選択します。 次に、[アプリケーションは、パブリック クライアントとして扱います][はい] を選択します。

ユーザー アカウントをデバイス コード フローで認証する

次の例では、IoT デバイスで DeviceCodeCredential を使用して、Java 用 Azure Key Vault シークレット クライアント ライブラリ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 が必要です。 登録した Microsoft Entra アプリケーションの [認証] セクションの [リダイレクト URI] サブセクションにリダイレクト URL を追加します。

ユーザー アカウントをブラウザーで対話形式で認証する

次の例では、azure-security-keyvault-secrets クライアント ライブラリの SecretClient を、InteractiveBrowserCredential を使用して認証する場合を示しています。

/**
 * 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 クライアント ライブラリの SecretClient を、UsernamePasswordCredential を使用して認証する場合を示しています。 ユーザーは多要素認証をオンにしてはなりません。

/**
 * 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 ID プラットフォームと OAuth 2.0 リソース所有者のパスワード資格情報」を参照してください。

次のステップ

この記事では、ユーザー資格情報を使用した認証について説明しました。 この形式の認証は、Azure SDK for Java で可能な認証方法のうちの 1 つです。 次の記事では、他の方法について説明します。

ユーザー資格情報認証に関連する問題が発生した場合は、「ユーザー資格情報認証のトラブルシューティング」を参照してください。

認証について習得した後、SDK によって提供されるログ機能の詳細について「Azure SDK for Java でログを構成する」を参照してください。