Microsoft Entra ID を使用して Microsoft Graph の Intune API にアクセスする方法

Microsoft Graph API では、特定の API とアクセス許可ロールを持つ Microsoft Intune がサポートされるようになりました。 Microsoft Graph API は、認証とアクセス制御に Microsoft Entra ID を使用します。
Microsoft Graph の Intune API へのアクセスには、次のものが必要です。

  • アプリケーション ID と、

    • Microsoft Entra ID と Microsoft Graph API を呼び出すアクセス許可。
    • 特定のアプリケーション タスクに関連したアクセス許可スコープ。
  • ユーザー資格情報と、

    • アプリケーションに関連付けられている Microsoft Entra テナントにアクセスするためのアクセス許可。
    • アプリケーションのアクセス許可スコープをサポートするために必要な役割のアクセス許可。
  • Azure テナントのアプリケーション タスクを実行するためのアクセス許可をアプリに付与するエンド ユーザー。

この記事の内容:

  • Microsoft Graph API と関連するアクセス許可ロールへのアクセス権を持つアプリケーションを登録する方法を示します。

  • Intune API アクセス許可ロールについて説明します。

  • C# と PowerShell の Intune API 認証の例を示します。

  • 複数のテナントをサポートする方法について説明します。

詳細については、次を参照してください。

Microsoft Graph API を使用するアプリを登録する

Microsoft Graph API を使用するアプリを登録するには、次の作業を行います。

  1. 管理資格情報を使用して Microsoft Intune 管理センター にサインインします。

    必要に応じて、次を使用することができます。

    • テナントの管理者アカウント。
    • [ユーザー] が有効になっているテナント ユーザー アカウント は、アプリケーション設定を登録できます
  2. [ すべてのサービス>M365 Microsoft Entra ID>Microsoft Entra ID>App registrations] を選択します。

    [アプリの登録] メニュー コマンド
  3. [新規登録] を選択して新しいアプリケーションを作成するか、既存のアプリケーションを選択します。 (既存のアプリケーションを選択する場合は、次の手順をスキップします)。

  4. [ アプリケーションの登録 ] ウィンドウで、次を指定します。

  5. アプリケーション ウィンドウから次の操作を行います。

    1. アプリケーション (クライアント) ID 値に注意してください。

    2. [API アクセス許可] を選択します。

  6. [ API のアクセス許可 ] ウィンドウで、[ アクセス許可の追加>Microsoft API>Microsoft Graph] を選択します。 次に、アプリケーションに必要なアクセス許可の種類を選択します。

    アプリに必要なロールを選択するには、関連する名前の左側にチェックマークを付けます。 特定の Intune アクセス許可スコープの詳細については、「 Intune のアクセス許可スコープ」を参照してください。 他の Graph API アクセス許可スコープについては、「 Microsoft Graph のアクセス許可リファレンス」を参照してください。

    最善の結果を得るには、アプリケーションの実装に必要な最小限の役割を選択します。

データ ウェアハウスとレポートのアクセス許可

Microsoft Entra 管理センターを使用してアプリケーションを追加する場合は、アプリケーションの要件に基づいて Intune API のアクセス許可を選択できます。

  • get_data_warehouse - この API アクセス許可を使用して、Microsoft Intune から Intune データ ウェアハウス API へのアクセスを許可します。 詳細については、「 Microsoft Intune Data Warehouse の使用」を参照してください。

パートナー ソリューション API

Microsoft Entra 管理センターを使用してアプリケーションを追加する場合、次の Intune API アクセス許可を使用できます。

  • get_device_compliance - この API アクセス許可は、Microsoft Intune からデバイスの状態とコンプライアンス情報を取得するために使用されます。 この API アクセス許可は、ネットワーク アクセス制御パートナーによって使用されます。 詳細については、「 ネットワーク アクセス制御と Intune の統合」を参照してください。
  • manage_partner_compliance_policy - この API アクセス許可は、Microsoft Intune でパートナー コンプライアンス ポリシーを管理するために使用されます。 この API アクセス許可を使用すると、アプリは、サインインしているユーザーなしでパートナー コンプライアンス ポリシーとその Microsoft Entra グループ割り当てを Microsoft Intune に送信できます。 これは、デバイス コンプライアンス パートナーによって使用されます。 詳細については、「 サード パーティのデバイス コンプライアンス パートナー」を参照してください。
  • pfx_cert_provider - この API アクセス許可は、特定のユーザーの PFX 証明書を Intune に送信するために使用されます。 Intune は、ユーザーが登録したすべてのデバイスに証明書を配信します。 詳細については、「 PFX Import Powershell」を参照してください。
  • scep_challenge_provider - この API アクセス許可は、証明書要求の検証のために SCEP チャレンジを Intune に送信するために使用されます。 証明機関のパートナーによって使用されます。 詳細については、「 パートナー証明機関」を参照してください。
  • update_device_attributes - この API アクセス許可は、デバイスコンプライアンスおよびモバイル脅威防御パートナーから Intune にデバイス情報を送信するために使用されます。 詳細については、「 Mobile Threat Defense と Intune および サード パーティデバイス コンプライアンス パートナーの統合」を参照してください。
  • update_device_health - この API アクセス許可は、モバイル脅威防御パートナーからデバイスの正常性と脅威の状態情報を Intune に送信するために使用されます。 詳細については、「 Mobile Threat Defense と Intune の統合」を参照してください。

これらの API アクセス許可を使用して Intune との統合に関心があるパートナーの場合は、 Microsoft Intelligent Security Association] チームに問い合わせてください。

完了したら、[ アクセス許可の追加] を選択して変更を保存します。

この時点で、次の場合もあります。

  • 資格情報を指定せずにアプリを使用するためのアクセス許可をすべてのテナント アカウントに付与することを選択します。

    これを行うために、アクセス許可を付与し、確認プロンプトで同意できます。

    アプリケーションを初めて実行すると、選択したロールを実行するためのアクセス許可をアプリに付与するように求められます。

  • テナント外のユーザーがアプリを使用できるようにします。 (これは通常、複数のテナント/組織をサポートするパートナーにのみ必要です)。

    そのために、次の操作を実行します。

    1. アプリケーション ウィンドウから [マニフェスト ] を選択します。

      [マニフェストの編集] ブレード
    2. availableToOtherTenants設定の値を true に変更します。

    3. 変更内容を保存します。

アプリの一覧

Graph API の使用時にアプリの一覧を要求しているときに大量のデータを受け取ると、503 サービス利用不可エラーが発生する可能性があります。 20 個以下の要素など、ページ サイズを小さくしてもう一度試してみることをお勧めします。

Intune のアクセス許可スコープ

Microsoft Entra ID と Microsoft Graph では、アクセス許可スコープを使用して、企業リソースへのアクセスを制御します。

アクセス許可スコープ ( OAuth スコープとも呼ばれます) は、特定の Intune エンティティとそのプロパティへのアクセスを制御します。 このセクションでは、Intune API 機能のアクセス許可スコープの概要を示します。

詳細情報:

Microsoft Graph にアクセス許可を付与する場合は、Intune 機能へのアクセスを制御するために、次のスコープを指定できます。次の表は、Intune API のアクセス許可スコープをまとめたものです。 最初の列には 、Microsoft Intune 管理センター に表示される機能の名前が表示され、2 番目の列にはアクセス許可スコープ名が表示されます。

アクセス設定を有効にする スコープ名
Microsoft Intune デバイスでユーザーに影響を与えるリモート操作を実行する DeviceManagementManagedDevices.PrivilegedOperations.All
Microsoft Intune デバイスの読み取りおよび書き込み DeviceManagementManagedDevices.ReadWrite.All
Microsoft Intune デバイスの読み取り DeviceManagementManagedDevices.Read.All
Microsoft Intune RBAC の設定の読み取りおよび書き込み DeviceManagementRBAC.ReadWrite.All
Microsoft Intune RBAC の設定の読み取り DeviceManagementRBAC.Read.All
Microsoft Intune アプリの読み取りおよび書き込み DeviceManagementApps.ReadWrite.All
Microsoft Intune アプリの読み取り DeviceManagementApps.Read.All
Microsoft Intune デバイスの構成とポリシーの読み取りと書き込み DeviceManagementConfiguration.ReadWrite.All
Microsoft Intune デバイスの構成とポリシーの読み取り DeviceManagementConfiguration.Read.All
Microsoft Intune 構成の読み取りおよび書き込み DeviceManagementServiceConfig.ReadWrite.All
Microsoft Intune 構成の読み取り DeviceManagementServiceConfig.Read.All

次の表に、 Microsoft Intune 管理センターに表示される設定の一覧を示します。 次のセクションでは、スコープをアルファベット順に説明します。

現時点では、すべての Intune アクセス許可スコープに管理者アクセス権が必要です。 これは、Intune API リソースにアクセスするアプリまたはスクリプトを実行するときに、対応する資格情報が必要であることを意味します。

DeviceManagementApps.Read.All

  • アクセス設定を有効にする : Microsoft Intune アプリを読み取る

  • 次のエンティティのプロパティと状態への読み取りアクセスを許可します。

    • クライアント アプリ
    • モバイル アプリのカテゴリ
    • アプリ保護ポリシー
    • アプリの構成

DeviceManagementApps.ReadWrite.All

  • アクセス設定を有効にする : Microsoft Intune アプリの読み取りと書き込み

  • DeviceManagementApps.Read.All と同じ操作を許可します

  • また、次のエンティティに対する変更も許可します。

    • クライアント アプリ
    • モバイル アプリのカテゴリ
    • アプリ保護ポリシー
    • アプリの構成

DeviceManagementConfiguration.Read.All

  • アクセス設定を有効にする : Microsoft Intune デバイスの構成とポリシーを読み取ります

  • 次のエンティティのプロパティと状態への読み取りアクセスを許可します。

    • デバイス構成
    • デバイス コンプライアンス ポリシー
    • 通知メッセージ

DeviceManagementConfiguration.ReadWrite.All

  • アクセス設定を有効にする : Microsoft Intune デバイスの構成とポリシーの読み取りと書き込み

  • DeviceManagementConfiguration.Read.All と同じ操作を許可します

  • アプリでは、次のエンティティを作成、割り当て、削除、変更することもできます。

    • デバイス構成
    • デバイス コンプライアンス ポリシー
    • 通知メッセージ

DeviceManagementManagedDevices.PrivilegedOperations.All

  • アクセス設定を有効にする: Microsoft Intune デバイスでユーザーに影響を与えるリモート アクションを実行する

  • マネージド デバイスで次のリモート アクションを許可します。

    • 破棄
    • ワイプ
    • パスコードのリセット/回復
    • リモート ロック
    • 紛失モードを有効/無効にする
    • クリーン PC
    • 再起動
    • 共有デバイスからユーザーを削除する

DeviceManagementManagedDevices.Read.All

  • アクセス設定を有効にする : Microsoft Intune デバイスを読み取る

  • 次のエンティティのプロパティと状態への読み取りアクセスを許可します。

    • マネージド デバイス
    • デバイス カテゴリ
    • 検出されたアプリ
    • リモート操作
    • マルウェア情報

DeviceManagementManagedDevices.ReadWrite.All

  • アクセス設定を有効にする : Microsoft Intune デバイスの読み取りと書き込み

  • DeviceManagementManagedDevices.Read.All と同じ操作を許可します

  • アプリでは、次のエンティティを作成、削除、変更することもできます。

    • マネージド デバイス
    • デバイス カテゴリ
  • 次のリモート アクションも許可されます。

    • デバイスの検索
    • アクティベーション ロックを無効にする
    • リモート アシスタンスを要求する

DeviceManagementRBAC.Read.All

  • アクセス設定を有効にする : Microsoft Intune RBAC 設定の読み取り

  • 次のエンティティのプロパティと状態への読み取りアクセスを許可します。

    • ロールの割り当て
    • ロールの定義
    • リソース操作

DeviceManagementRBAC.ReadWrite.All

  • アクセス設定を有効にする : Microsoft Intune RBAC 設定の読み取りと書き込み

  • DeviceManagementRBAC.Read.All と同じ操作を許可します

  • アプリでは、次のエンティティを作成、割り当て、削除、変更することもできます。

    • ロールの割り当て
    • ロールの定義

DeviceManagementServiceConfig.Read.All

  • アクセス設定を有効にする : Microsoft Intune 構成の読み取り

  • 次のエンティティのプロパティと状態への読み取りアクセスを許可します。

    • デバイス登録
    • Apple プッシュ通知証明書
    • Apple Device Enrollment Program
    • Apple ボリューム購入プログラム
    • Exchange コネクタ
    • 使用条件
    • クラウド PKI
    • ブランド化
    • モバイル脅威防御

DeviceManagementServiceConfig.ReadWrite.All

  • アクセス設定を有効にする : Microsoft Intune 構成の読み取りと書き込み

  • DeviceManagementServiceConfig.Read.All_と同じ操作を許可します

  • アプリでは、次の Intune 機能を構成することもできます。

    • デバイス登録
    • Apple プッシュ通知証明書
    • Apple Device Enrollment Program
    • Apple ボリューム購入プログラム
    • Exchange コネクタ
    • 使用条件
    • クラウド PKI
    • ブランド化
    • モバイル脅威防御

Microsoft Entra 認証の例

このセクションでは、Microsoft Entra ID を C# および PowerShell プロジェクトに組み込む方法について説明します。

各例では、少なくとも DeviceManagementManagedDevices.Read.All アクセス許可スコープを持つアプリケーション ID を指定する必要があります (前に説明しました)。

いずれかの例をテストすると、次のような HTTP 状態 403 (禁止) エラーが発生する可能性があります。

{
  "error": {
    "code": "Forbidden",
    "message": "Application is not authorized to perform this operation - Operation ID " +
       "(for customer support): 00000000-0000-0000-0000-000000000000 - " +
       "Activity ID: cc7fa3b3-bb25-420b-bfb2-1498e598ba43 - " +
       "Url: https://example.manage.microsoft.com/" +
       "Service/Resource/RESTendpoint?" +
       "api-version=2017-03-06 - CustomApiErrorPhrase: ",
    "innerError": {
      "request-id": "00000000-0000-0000-0000-000000000000",
      "date": "1980-01-0112:00:00"
    }
  }
}

この場合は、次のことを確認します。

  • アプリケーション ID を、Microsoft Graph API と DeviceManagementManagedDevices.Read.All アクセス許可スコープの使用を承認されたものに更新しました。

  • テナント資格情報は管理機能をサポートします。

  • コードは、表示されているサンプルに似ています。

C で Microsoft Entra ID を認証する#

この例では、C# を使用して、Intune アカウントに関連付けられているデバイスの一覧を取得する方法を示します。

注:

Azure AD Graph API は廃止フェーズにあります。 詳細については、「Microsoft Authentication Library (MSAL) と Microsoft Graph API を使用するようにアプリケーションを更新する」を参照してください。

  1. Visual Studio を起動し、新しい Visual C# コンソール アプリ (.NET Framework) プロジェクトを作成します。

  2. プロジェクトの名前を入力し、必要に応じてその他の詳細を指定します。

    Visual Studio での C# コンソール アプリ プロジェクトの作成
  3. ソリューション エクスプローラーを使用して、Microsoft MSAL NuGet パッケージをプロジェクトに追加します。

    1. ソリューション エクスプローラーを右クリックします。
    2. [ NuGet パッケージの管理] を選択します。..>参照します。
    3. [ Microsoft.Identity.Client ] を選択し、[ インストール] を選択します。
  4. Program.csの先頭に次のステートメントを追加します。

    using Microsoft.Identity.Client;
    using System.Net.Http;
    
  5. 承認ヘッダーを作成するメソッドを追加します。

    private static async Task<string> GetAuthorizationHeader()
    {
        string applicationId = "<Your Application ID>";
        string authority = "https://login.microsoftonline.com/common/";
        Uri redirectUri = new Uri("urn:ietf:wg:oauth:2.0:oob");
        AuthenticationContext context = new AuthenticationContext(authority);
        AuthenticationResult result = await context.AcquireTokenAsync(
            "https://graph.microsoft.com",
            applicationId, redirectUri,
            new PlatformParameters(PromptBehavior.Auto));
        return result.CreateAuthorizationHeader();
    

    前に説明したように、少なくともDeviceManagementManagedDevices.Read.Allアクセス許可スコープが付与されている値と一致するように、application_IDの値を変更してください。

  6. デバイスの一覧を取得するメソッドを追加します。

    private static async Task<string> GetMyManagedDevices()
    {
        string authHeader = await GetAuthorizationHeader();
        HttpClient graphClient = new HttpClient();
        graphClient.DefaultRequestHeaders.Add("Authorization", authHeader);
        return await graphClient.GetStringAsync(
            "https://graph.microsoft.com/beta/me/managedDevices");
    }
    
  7. GetMyManagedDevices を呼び出すように Main を更新します。

    string devices = GetMyManagedDevices().GetAwaiter().GetResult();
    Console.WriteLine(devices);
    
  8. プログラムをコンパイルして実行します。

最初にプログラムを実行すると、2 つのプロンプトが表示されます。 1 つ目は資格情報を要求し、2 つ目は managedDevices 要求のアクセス許可を付与します。

参考までに、完了したプログラムを次に示します。

using Microsoft.Identity.Client;
using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace IntuneGraphExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string devices = GetMyManagedDevices().GetAwaiter().GetResult();
            Console.WriteLine(devices);
        }

        private static async Task<string> GetAuthorizationHeader()
        {
            string applicationId = "<Your Application ID>";
            string authority = "https://login.microsoftonline.com/common/";
            Uri redirectUri = new Uri("urn:ietf:wg:oauth:2.0:oob");
            AuthenticationContext context = new AuthenticationContext(authority);
            AuthenticationResult result = await context.AcquireTokenAsync("https://graph.microsoft.com", applicationId, redirectUri, new PlatformParameters(PromptBehavior.Auto));
            return result.CreateAuthorizationHeader();
        }

        private static async Task<string> GetMyManagedDevices()
        {
            string authHeader = await GetAuthorizationHeader();
            HttpClient graphClient = new HttpClient();
            graphClient.DefaultRequestHeaders.Add("Authorization", authHeader);
            return await graphClient.GetStringAsync("https://graph.microsoft.com/beta/me/managedDevices");
        }
    }
}

Microsoft Graph PowerShell を使用して Microsoft Entra ID を認証する

PowerShell スクリプトでは、認証に Microsoft Graph PowerShell モジュールを使用できます。 詳細については、 Microsoft Graph PowerShellIntune PowerShell の例に関するページを参照してください。

複数のテナントとパートナーをサポートする

組織が独自の Microsoft Entra テナントを持つ組織をサポートしている場合は、クライアントがそれぞれのテナントでアプリケーションを使用することを許可することができます。

そのために、次の操作を実行します。

  1. クライアント アカウントがターゲットの Microsoft Entra テナントに存在することを確認します。

  2. テナント アカウントでユーザーがアプリケーションを登録することを許可していることを確認します (「 ユーザー設定」を参照)。

  3. 各テナント間の関係を確立します。

    これを行うには、次のいずれかを行います。

    a. Microsoft パートナー センターを使用して、クライアントとそのメール アドレスとの関係を定義します。

    b. テナントのゲストになるようにユーザーを招待します。

テナントのゲストにユーザーを招待するには:

  1. [クイック タスク] パネルから [ゲスト ユーザーの追加] を選択します。

    クイック タスクを使用してゲスト ユーザーを追加する
  2. クライアントのメール アドレスを入力し、(必要に応じて) 招待用にパーソナライズされたメッセージを追加します。

    外部ユーザーをゲストとして招待する
  3. [ 招待] を選択します。

これにより、ユーザーに招待が送信されます。

ゲスト招待のサンプル

招待を承諾するには、ユーザーが [開始] リンクを選択する必要があります。

リレーションシップが確立されたとき (または招待が承諾された場合)、ユーザー アカウントを ディレクトリ ロールに追加します。

必要に応じて、他のロールにユーザーを追加してください。 たとえば、ユーザーが Intune 設定を管理できるようにするには、 グローバル管理者 または Intune サービス管理者である必要があります。

また、

  • https://admin.microsoft.comを使用して、Intune ライセンスをユーザー アカウントに割り当てます。

  • 独自のアプリケーション コードではなく、クライアントの Microsoft Entra テナント ドメインに対して認証するようにアプリケーション コードを更新します。

    たとえば、テナント ドメインが contosopartner.onmicrosoft.com され、クライアントのテナント ドメインが northwind.onmicrosoft.comされている場合は、クライアントのテナントに対して認証するようにコードを更新します。

    前の例に基づいて C# アプリケーションでこれを行うには、 authority 変数の値を変更します。

    string authority = "https://login.microsoftonline.com/common/";
    

    string authority = "https://login.microsoftonline.com/northwind.onmicrosoft.com/";