Java 開発環境での 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. [既定のクライアントの種類] で、[アプリケーションは、パブリック クライアントとして扱います] に対して [はい] を選択します。

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

また、初回サインイン時はアプリケーションの同意を許可するためにテナントの管理者である必要がある場合があります。

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

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

次の例では、IoT デバイス上で DeviceCodeCredential を使用して azure-security-keyvault-secrets クライアント ライブラリから SecretClient を認証することを示しています。

DeviceCodeCredential deviceCodeCredential = new DeviceCodeCredentialBuilder()
  .challengeConsumer(challenge -> {
    // lets user know of 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 を使用して認証する場合を示しています。

InteractiveBrowserCredential interactiveBrowserCredential = new InteractiveBrowserCredentialBuilder()
  .clientId("<your client ID>")
  .redirectUrl("http://localhost:8765")
  .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();

Azure CLI の資格情報

Azure CLI の資格情報は、Azure CLI で有効になっているユーザーまたはサービス プリンシパルを使用して、開発環境で認証を行います。 既にログインしているユーザーを指定して Azure CLI を使用し、CLI を使用して Microsoft Entra ID に対してアプリケーションを認証します。

AzureCliCredential を目的とした Azure CLI へのサインイン

次の Azure CLI コマンドを使用して、ユーザーとしてサインインします。

az login

次のコマンドを使用して、サービス プリンシパルとしてサインインします。

az login \
    --service-principal \
    --username <client-ID> \
    --password <client-secret> \
    --tenant <tenant-ID>

アカウントまたはサービス プリンシパルに複数のテナントへのアクセス権がある場合は、次のコマンドの出力で、目的のテナントまたはサブスクリプションの状態が "有効" になっていることを確認してください。

az account list

コードで AzureCliCredential を使用する前に、次のコマンドを実行して、アカウントが正常に構成されていることを確認します。

az account get-access-token

組織内の更新トークンの有効性によっては、一定期間後にこのプロセスを繰り返す必要がある場合があります。 一般に、更新トークンの有効期間は数週間から数か月です。 AzureCliCredential によって、もう一度サイン インが求められます。

ユーザー アカウントを Azure CLI で認証する

次の例では、Azure CLI がインストール済みでサインイン済みのワークステーション上で AzureCliCredential を使用して azure-security-keyvault-secrets クライアント ライブラリから SecretClient を認証することを示しています。

AzureCliCredential cliCredential = new AzureCliCredentialBuilder().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(cliCredential)
  .buildClient();

IntelliJ の資格情報

IntelliJ の資格情報は、Azure Toolkit for IntelliJ のアカウントを使用して、開発環境で認証を行います。 IntelliJ IDE でサインインしているユーザー情報を使用し、それを使用して Microsoft Entra ID に対してアプリケーションを認証します。

IntelliJCredential を目的とした Azure Toolkit for IntelliJ へのサインイン

次の手順を実行して、サイン インします。

  1. IntelliJ ウィンドウで、[File]\(ファイル\) > [Settings]\(設定\) > [Plugins]\(プラグイン\) を開きます。
  2. マーケットプレースで「Azure Toolkit for IntelliJ」を検索します。 IDE をインストールして再起動します。
  3. 新しいメニュー項目 [ツール] > [Azure] > [Azure サインイン] を検索します
  4. デバイス ログインは、ユーザー アカウントとしてサイン インする際に役立ちます。 次の手順を実行して、デバイス コードを使用して login.microsoftonline.com Web サイトにサイン インします。 IntelliJ によって、サブスクリプションを選択するように求められます。 アクセスするリソースを含むサブスクリプションを選択します。

Windows では、IntelliJ の資格情報を読み取るための KeePass データベース パスも必要になります。 このパスは、IntelliJ 設定の [ファイル > 設定の外観] および [動作>システム] 設定 > パスワード>にあります。 KeePassDatabase パスの場所をメモしておきます。

ユーザー アカウントを IntelliJ IDEA で認証する

次の例では、IntelliJ IDEA がインストールされ、ユーザーが Azure アカウントを使用してサインインしたワークステーション上で、IntelliJCredential を使用して azure-security-keyvault-secrets クライアント ライブラリから SecretClient を認証します。

IntelliJCredential intelliJCredential = new IntelliJCredentialBuilder()
  // KeePass configuration isrequired only for Windows. No configuration needed for Linux / Mac.
  .keePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
  .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(intelliJCredential)
  .buildClient();

Visual Studio Code の資格情報

Visual Studio Code の資格情報を使用すると、VS Code Azure Account 拡張機能を使用して VS Code がインストールされた開発環境での認証が可能になります。 VS Code IDE にサインインしているユーザー情報を使用し、それを使用して Microsoft Entra ID に対してアプリケーションを認証します。

VisualStudioCodeCredential を目的とした Visual Studio Code Azure Account 拡張機能へのサインイン

Nn と Azure Account 拡張機能の統合は、Visual Studio コード認証を処理します。 この形式の認証を使用するには、Azure Account 拡張機能をインストールしてから、[View]\(表示\) > [Command Palette]\(コマンドパレット\) を使用して Azure: Sign In コマンドを実行します。 このコマンドを実行すると、ブラウザー ウィンドウが開き、Azure にサインインするためのページが表示されます。 サイン イン プロセスが完了したら、指示に従ってブラウザーを閉じることができます。 (デバッガーで、または開発用コンピューター上の任意の場所で) アプリケーションを実行すると、サインイン時の資格情報が使用されます。

ユーザー アカウントを Visual Studio Code で認証する

次の例では、Visual Studio Code がインストールされ、ユーザーが Azure アカウントを使用してサインインしたワークステーション上で、VisualStudioCodeCredential を使用して azure-security-keyvault-secrets クライアント ライブラリから SecretClient を認証します。

VisualStudioCodeCredential visualStudioCodeCredential = new VisualStudioCodeCredentialBuilder().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(visualStudioCodeCredential)
  .buildClient();

次のステップ

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

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

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