如何使用 Microsoft Entra ID 访问 Microsoft Graph 中的 Intune API

Microsoft 图形 API 现在支持具有特定 API 和权限角色的 Microsoft Intune。 Microsoft 图形 API 使用 Microsoft Entra ID 进行身份验证和访问控制。 访问 Microsoft Graph 中的 Intune API 需要:

  • 应用程序 ID 需要具有:

    • 调用 Microsoft Entra ID 和 Microsoft Graph API 的权限。
    • 与具体应用程序任务相关的权限范围。
  • 用户凭据需要具有:

    • 访问与应用程序关联的 Microsoft Entra 租户的权限。
    • 支持应用程序权限范围所需的角色权限。
  • 最终用户向应用授予为其 Azure 租户执行应用程序任务的权限。

本文:

  • 介绍如何注册具有 Microsoft 图形 API 访问权限的应用程序和相关权限角色。

  • 描述 Intune API 权限角色。

  • 提供适用于 C# 和 PowerShell 的 Intune API 身份验证示例。

  • 介绍如何支持多个租户。

若要了解详细信息,请参阅:

注册应用以使用 Microsoft 图形 API

注册应用以使用 Microsoft 图形 API:

  1. 使用管理凭据登录到 Microsoft Entra 管理中心

    根据需要可以使用:

    • 租户管理员帐户。
    • 启用了 “用户可注册应用程序 ”设置的租户用户帐户。
  2. 在管理中心中,展开“标识>应用程序”,然后选择“应用注册”

    Entra 管理中心应用注册菜单位置的屏幕截图。

  3. 选择“新建注册”,以创建新的应用程序,或选择现有应用程序。 (如果您选择现有应用程序,请跳过下一步。)

  4. “注册应用程序 ”窗格中,指定以下内容:

  5. 选择 “注册” 以添加新应用程序。

    选择 “注册”即表示你同意 Microsoft 平台策略

  6. 从应用的应用程序窗格中:

    1. 请注意 应用程序 (客户端) ID 值。

    2. 然后,从导航菜单中选择“ API 权限”。

  7. API 权限 窗格:

    1. 选择“ 添加权限”,然后在“ Microsoft API” 选项卡上,选择“ Microsoft Graph ”磁贴。

    2. 选择 “应用程序权限 ”选项以显示所有可用权限,然后选择应用程序所需的权限类型。

    3. 通过在相关名称左侧添加复选标记来选择应用所需的角色。 若要了解特定的 Intune 权限范围,请参阅 Intune 权限范围。 若要了解其他图形 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 导入 Powershell
  • scep_challenge_provider - 此 API 权限用于向 Intune 发送 SCEP 质询以进行证书请求验证。 它由证书颁发机构合作伙伴使用。 有关详细信息,请参阅 合作伙伴证书颁发机构
  • update_device_attributes - 此 API 权限用于将设备信息发送到设备合规性和移动威胁防御合作伙伴的Intune。 有关详细信息,请参阅移动威胁防御与 Intune第三方设备合规性合作伙伴的集成。
  • update_device_health - 此 API 权限用于将设备运行状况和威胁状态信息发送给移动威胁防御合作伙伴的Intune。 有关详细信息,请参阅移动威胁防御与 Intune 的集成

如果你是有兴趣使用这些 API 权限与 Intune 集成的合作伙伴,请联系 Microsoft 智能安全协会] 团队了解信息。

完成后,选择 “添加权限” 以保存更改。

此时,还可以:

  • 选择授予所有租户帐户使用应用的权限,而无需提供凭据。

    为此,可选择“授予权限”并接受确认提示。

    首次运行应用程序时,系统会提示你授予应用执行所选角色的权限。

  • 使应用可供租户外部的用户使用。 (这通常仅支持多个租户/组织的合作伙伴才需要。)

    为此,请执行以下操作:

    1. 从应用程序窗格中选择 清单

    2. 将设置值 availableToOtherTenants 更改为 true.

    3. 保存所做的更改。

应用一览

如果在使用 图形 API 时请求应用列表时收到大量数据,可能会遇到“503 服务不可用”错误。 建议使用较小的页面大小(如 20 个或更少元素)重试。

Intune 权限范围

Microsoft Entra ID 和 Microsoft Graph 使用权限范围来控制对公司资源的访问。

权限范围 (也称为 OAuth 范围,) 控制对特定Intune实体及其属性的访问。 本部分总结 Intune API 功能的权限范围。

若要了解详细信息:

向 Microsoft Graph 授予权限时,可以指定以下范围来控制对 Intune 功能的访问: 下表总结了 Intune API 权限范围。 第一列显示 Microsoft Intune 管理中心中显示的功能名称,第二列提供权限范围名称。

启用访问设置 作用域名称
在 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 脚本 DeviceManagementScripts.Read.All
读取和写入 Microsoft Intune 脚本 DeviceManagementScripts.ReadWrite.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 设备配置和策略

  • 允许对以下实体属性和状态进行读取访问:

    • 设备配置
    • 设备合规性策略
    • 通知消息

注意

自 2025 年 7 月 31 日起,Microsoft Graph 将 DeviceManagementConfiguration.Read.All 权限替换为用于以下 API 调用的 DeviceManagementScripts.ReadWrite.All 权限:

  • ~/deviceManagement/deviceShellScripts
  • ~/deviceManagement/deviceHealthScripts
  • ~/deviceManagement/deviceComplianceScripts
  • ~/deviceManagement/deviceCustomAttributeShellScripts
  • ~/deviceManagement/deviceManagementScripts

DeviceManagementConfiguration.ReadWrite.All

  • 启用访问设置读取和写入 Microsoft Intune 设备配置和策略

  • 允许与 DeviceManagementConfiguration.Read.All 相同的操作

  • 应用还可以创建、分配、删除和更改以下实体:

    • 设备配置
    • 设备合规性策略
    • 通知消息

注意

自 2025 年 7 月 31 日起,Microsoft Graph 已将 DeviceManagementConfiguration.ReadWrite.All 权限替换为 DeviceManagementScripts.ReadWrite.All 用于以下 API 调用:

  • ~/deviceManagement/deviceShellScripts
  • ~/deviceManagement/deviceHealthScripts
  • ~/deviceManagement/deviceComplianceScripts
  • ~/deviceManagement/deviceCustomAttributeShellScripts
  • ~/deviceManagement/deviceManagementScripts

DeviceManagementManagedDevices.PrivilegedOperations.All

  • “启用访问权限”设置:在 Microsoft Intune 设备上执行影响用户的远程操作

  • 允许在受管理设备上执行以下远程操作:

    • 停用
    • 擦除
    • 重置/恢复密码
    • 远程锁定
    • 启用/禁用丢失模式
    • 清理电脑
    • 重启
    • 从共享设备删除用户

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 相同的操作

  • 应用还可以创建、分配、删除和更改以下实体:

    • 角色分配
    • 角色定义

DeviceManagementScripts.Read.All

  • “启用访问权限”设置:读取 Microsoft Intune 脚本

  • 应用可以查看 () 脚本读取,特别是:

    • 设备 Shell 脚本
    • 设备运行状况脚本
    • 设备合规性脚本
    • 设备自定义属性 Shell 脚本
    • 设备管理脚本

DeviceManagementScripts.ReadWrite.All

  • 启用访问权限”设置:读取和写入 Microsoft Intune 脚本
    允许与 DeviceManagementScripts.Read.All 相同的操作

  • 应用可以创建、更新或删除脚本,特别是:

    • 设备 Shell 脚本
    • 设备运行状况脚本
    • 设备合规性脚本
    • 设备自定义属性 Shell 脚本
    • 设备管理脚本

DeviceManagementServiceConfig.Read.All

  • 启用访问设置读取 Microsoft Intune 配置

  • 允许对以下实体属性和状态进行读取访问:

    • 设备注册
    • Apple 推送通知证书
    • Apple 设备注册计划
    • Apple 批量购买计划
    • Exchange Connector
    • 条款和条件
    • 云 PKI
    • 品牌打造
    • 移动威胁防御

DeviceManagementServiceConfig.ReadWrite.All

  • “启用访问”设置:读取和写入 Microsoft Intune 配置

  • 允许执行与 DeviceManagementServiceConfig.Read.All_ 相同的操作

  • 应用还可以配置以下 Intune 功能:

    • 设备注册
    • Apple 推送通知证书
    • Apple 设备注册计划
    • Apple 批量购买计划
    • Exchange Connector
    • 条款和条件
    • 云 PKI
    • 品牌打造
    • 移动威胁防御

Microsoft Entra 身份验证示例

本部分介绍如何将 Microsoft Entra ID 合并到 C# 和 PowerShell 项目中。

在每个示例中,需要指定的应用程序 ID 至少具有 DeviceManagementManagedDevices.Read.All) 前面讨论 (权限范围。

测试任一示例时,可能会收到 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 图形 API 和DeviceManagementManagedDevices.Read.All权限范围的应用程序 ID。

  • 租户凭据支持管理功能。

  • 代码与显示的示例类似。

在 C 中验证 Microsoft Entra ID#

此示例演示如何使用 C# 检索与 Intune 帐户关联的设备列表。

注意

Azure AD 图形 API 处于停用阶段。 有关详细信息,请参阅 更新应用程序以使用 Microsoft 身份验证库 (MSAL) 和 Microsoft 图形 API

  1. 启动 Visual Studio,然后在项目 (.NET Framework) 新建 Visual C# 控制台应用。

  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();
    

    如前所述,请记住更改 的 application_ID 值,以匹配至少 DeviceManagementManagedDevices.Read.All 授予权限范围的值。

  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. 更新 Main 以调用 GetMyManagedDevices

    string devices = GetMyManagedDevices().GetAwaiter().GetResult();
    Console.WriteLine(devices);
    
  8. 编译并运行程序。

首次运行程序时,应收到两个提示。 第一个请求凭据,第二个授予请求的 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/";