Java 開発環境での Azure 認証
この記事では、Microsoft Entra トークン認証のための Azure Identity ライブラリ サポートの概要について説明します。 このサポートにより、一連の TokenCredential
実装によって開発者のコンピューターでローカルに実行されているアプリケーションの認証が可能になります。
この記事に含まれるサブジェクトは次のとおりです。
開発環境の認証に関する問題のトラブルシューティングについては、「開発環境認証のトラブルシューティング」を参照してください。
デバイス コードの資格情報
デバイス コードの資格情報は、UI が制限されているデバイスでユーザーを対話形式で認証するものです。 これは、アプリケーションが認証を試みるときに、ブラウザー対応のコンピューターでサインイン URL にアクセスするようにユーザーに求めることで機能します。 そこでユーザーは、指示に記載されているデバイス コードを、サインイン資格情報とともに入力します。 認証が成功すると、認証を要求したアプリケーションは、それが実行されているデバイスで正常に認証されます。
詳細については、「Microsoft ID プラットフォームと OAuth 2.0 デバイス許可付与フロー」をご覧ください。
アプリケーションのデバイス コード フローを有効にする
ユーザーをデバイス コード フローで認証するには、次の手順に従います。
- Azure Portal で Microsoft Entra ID に移動し、アプリ登録を見つけます。
- [認証] セクションに移動します。
- [推奨されるリダイレクト URI] で、
/common/oauth2/nativeclient
で終わる URI をオンにします。 - [既定のクライアントの種類] で、[アプリケーションは、パブリック クライアントとして扱います] に対して [はい] を選択します。
これらの手順によってアプリケーションは認証されますが、まだ 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 へのサインイン
次の手順を実行して、サイン インします。
- IntelliJ ウィンドウで、[File]\(ファイル\) > [Settings]\(設定\) > [Plugins]\(プラグイン\) を開きます。
- マーケットプレースで「Azure Toolkit for IntelliJ」を検索します。 IDE をインストールして再起動します。
- 新しいメニュー項目 [ツール] > [Azure] > [Azure サインイン] を検索します
- デバイス ログインは、ユーザー アカウントとしてサイン インする際に役立ちます。 次の手順を実行して、デバイス コードを使用して
login.microsoftonline.com
Web サイトにサイン インします。 IntelliJ によって、サブスクリプションを選択するように求められます。 アクセスするリソースを含むサブスクリプションを選択します。
ユーザー アカウントを IntelliJ IDEA で認証する
次の例では、IntelliJ IDEA がインストールされ、ユーザーが Azure Toolkit for IntelliJ に Azure アカウントでサインインしたワークステーションを使用してIntelliJCredential
、azure-security-keyvault-secrets クライアント ライブラリから認証SecretClient
する方法を示します。
IntelliJCredential intelliJCredential = new IntelliJCredentialBuilder()
.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();
次のステップ
この記事では、お使いのコンピューターで使用可能な資格情報を使用した開発時の認証について説明しました。 この形式の認証は、Azure SDK for Java で可能な認証方法のうちの 1 つです。 次の記事では、他の方法について説明します。
開発環境の認証に関連する問題が発生した場合は、「開発環境認証のトラブルシューティング」を参照してください。
認証について習得した後、SDK によって提供されるログ機能の詳細について「Azure SDK for Java でログを構成する」を参照してください。