次の方法で共有


クイックスタート: トークンを取得し、Java コンソール アプリからアプリの ID を使用して Microsoft Graph API を呼び出す

ようこそ。 ご要望のページを表示できません。 問題の修正に取り組んでいますが、次のリンクから目的の記事にアクセスできるかお試しください。

クイック スタート: Python デーモン アプリからトークンを取得し、Microsoft Graph を呼び出す

ご不便をおかけして申し訳ありませんが、問題が解決するまで今しばらくお待ちください。

このクイックスタートでは、Java アプリケーションでアプリの ID を使ってアクセス トークンを取得して、Microsoft Graph API を呼び出し、ディレクトリ内のユーザーの一覧を表示する方法を示すコード サンプルをダウンロードして実行します。 このコード サンプルでは、ユーザーの ID ではなく、アプリケーション ID を使用して、無人のジョブまたは Windows サービスを実行する方法を示します。

前提条件

このサンプルを実行するには、以下が必要です。

クイックスタート アプリをダウンロードして構成する

手順 1: Azure portal でのアプリケーションの構成

このクイック スタート用サンプル コードを動作させるには、クライアント シークレットを作成し、Graph API の User.Read.All アプリケーションのアクセス許可を追加します。

Already configuredアプリケーションはこれらの属性で構成されています。

手順 2:Java プロジェクトのダウンロード

注意

Enter_the_Supported_Account_Info_Here

この時点でアプリケーションを実行すると、HTTP 403 - Forbidden エラー "Insufficient privileges to complete the operation" が表示されます。 このエラーは、すべての "アプリ専用のアクセス許可" には管理者の同意が必要であるために発生します。ディレクトリの全体管理者がお使いのアプリケーションに同意する必要があります。 ご自身のロールに応じて、次のオプションのいずれかを選択します。

グローバル テナント管理者

グローバル管理者の場合は、[API のアクセス許可] ページに移動し、[Enter_the_Tenant_Name_Here に管理者の同意を与えます] を選択します。

標準ユーザー

テナントの標準ユーザーの場合は、アプリケーションに管理者の同意を与えるようグローバル管理者に依頼する必要があります。 これを行うには、次の URL を管理者に知らせます。

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

手順 4:アプリケーションの実行

このサンプルは、IDE から ClientCredentialGrant.java の main メソッドを実行することで直接テストできます。

シェルまたはコマンド ラインから:

$ mvn clean compile assembly:single

/targets ディレクトリに msal-client-credential-secret-1.0.0.jar ファイルが生成されます。 次のように Java 実行可能ファイルを使用してこれを実行します。

$ java -jar msal-client-credential-secret-1.0.0.jar

実行後、構成済みのテナントに存在するユーザーが一覧表示されます。

重要

このクイック スタート アプリケーションは、クライアント シークレットを使用して、それ自体を機密クライアントとして識別します。 クライアント シークレットはプロジェクト ファイルにプレーン テキストとして追加されるため、セキュリティ上の理由から、アプリケーションを運用アプリケーションと見なす前に、クライアント シークレットの代わりに証明書を使用することをお勧めします。 証明書の使用方法の詳細については、このサンプルと同じ GitHub リポジトリの 2 つ目のフォルダー msal-client-credential-certificate にあるこれらの手順を参照してください。

説明

MSAL Java

MSAL Java はユーザーのサインインを処理し、Microsoft ID プラットフォームによって保護されている API にアクセスするトークンを要求するために使用するライブラリです。 説明したとおり、このクイック スタートでは、委任されたアクセス許可ではなく、アプリケーション自体の ID を使用してトークンを要求しています。 ここで使用される認証フローは、" クライアント資格情報 OAuth フロー " と呼ばれます。 デーモン アプリでの MSAL Java の使用方法の詳細については、この記事を参照してください。

Maven または Gradle を使用して、アプリケーションに MSAL4J を追加し、アプリケーションの pom.xml (Maven) または build.gradle (Gradle) ファイルに対して以下の変更を行うことで、依存関係を管理します。

pom.xml 内:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.0.0</version>
</dependency>

build.gradle 内:

compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'

MSAL の初期化

MSAL for Java を使用するファイルの先頭に次のコードを追加して、MSAL4J への参照を追加します。

import com.microsoft.aad.msal4j.*;

続いて、次のコードを使用して MSAL を初期化します。

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);

ConfidentialClientApplication cca =
        ConfidentialClientApplication
                .builder(CLIENT_ID, credential)
                .authority(AUTHORITY)
                .build();
各値の説明: 説明
CLIENT_SECRET Azure portal 上でアプリケーションに対して作成されるクライアント シークレット。
CLIENT_ID Azure portal に登録されているアプリケーションの "アプリケーション (クライアント) ID"。 この値は、Azure portal のアプリの [概要] ページで確認できます。
AUTHORITY ユーザーが認証するための STS エンドポイント。 通常、パブリック クラウド上では https://login.microsoftonline.com/{tenant} です。{tenant} はご自分のテナントの名前またはテナント ID です。

トークンの要求

アプリの ID を使用してトークンを要求するには、acquireToken メソッドを使用します。

IAuthenticationResult result;
     try {
         SilentParameters silentParameters =
                 SilentParameters
                         .builder(SCOPE)
                         .build();

         // try to acquire token silently. This call will fail since the token cache does not
         // have a token for the application you are requesting an access token for
         result = cca.acquireTokenSilently(silentParameters).join();
     } catch (Exception ex) {
         if (ex.getCause() instanceof MsalException) {

             ClientCredentialParameters parameters =
                     ClientCredentialParameters
                             .builder(SCOPE)
                             .build();

             // Try to acquire a token. If successful, you should see
             // the token information printed out to console
             result = cca.acquireToken(parameters).join();
         } else {
             // Handle other exceptions accordingly
             throw ex;
         }
     }
     return result;
各値の説明: 説明
SCOPE 要求されるスコープが含まれています。 機密クライアントの場合は、{Application ID URI}/.default のような形式を使用して、要求されるスコープが Azure portal で設定されるアプリ オブジェクト内に静的に定義されたものであることを示す必要があります (Microsoft Graph では、{Application ID URI}https://graph.microsoft.com を指します)。 カスタム Web API の場合、{Application ID URI} は、Azure portal で [アプリの登録][API の公開] セクションに定義されます。

ヘルプとサポート

サポートが必要な場合、問題をレポートする場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。

次のステップ

デーモン アプリケーションの詳細については、シナリオのランディング ページを参照してください。