如何使用Azure AD访问 Microsoft Intune API Graph

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

  • 应用程序 ID 需要具有:

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

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

本文:

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

  • 介绍Intune API 权限角色。

  • 为 C# 和 PowerShell 提供Intune API 身份验证示例。

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

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

注册应用以使用 Microsoft Graph API

注册应用以使用 Microsoft Graph API:

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

    根据需要可以使用:

    • 租户管理员帐户。
    • 具有用户的租户用户帐户 可以注册 启用的应用程序设置。
  2. 选择 所有 servicesM365 > Azure Active Directory > Azure Active Directory > 应用注册

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

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

  5. 从应用程序窗格中:

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

    2. 选择 API 权限

  6. “API 权限”窗格中,选择 “添加 permissionMicrosoft > APIMicrosoft > Graph。 然后,选择应用程序所需的权限类型。

    通过将复选标记放置在相关名称的左侧,选择应用所需的角色。 若要了解特定Intune权限范围,请参阅Intune权限范围。 若要了解其他图形 API权限范围,请参阅 Microsoft Graph权限参考

    为获得最佳效果,请选择实现应用程序所需的最少角色。

数据仓库和报告权限

通过Azure Active Directory管理中心添加应用程序时,可以根据应用程序的要求选择Intune API 权限。

合作伙伴解决方案 API

通过Azure Active Directory管理中心添加应用程序时,可使用以下Intune API 权限:

  • get_device_compliance - 此 API 权限用于从Microsoft Intune获取设备状态和符合性信息。 网络访问控制合作伙伴使用此 API 权限。 有关详细信息,请参阅网络访问控制与Intune的集成
  • manage_partner_compliance_policy - 此 API 权限用于使用Microsoft Intune管理合作伙伴合规性策略。 此 API 权限允许应用在没有登录用户的情况下向Microsoft Intune发送合作伙伴符合性策略及其Azure AD组分配。 设备符合性合作伙伴使用它。 有关详细信息,请参阅 第三方设备符合性合作伙伴
  • pfx_cert_provider - 此 API 权限用于将 PFX 证书发送到特定用户Intune。 Intune将证书传递给用户注册的所有设备。 有关详细信息,请参阅 PFX 导入 Powershell
  • scep_challenge_provider - 此 API 权限用于向Intune发送 SCEP 质询以进行证书请求验证。 证书颁发机构合作伙伴使用它。 有关详细信息,请参阅 合作伙伴证书颁发机构
  • send_data_usage - 此 API 权限用于根据电信费用管理阈值触发设备的策略更改。 它用于电信费用管理合作伙伴集成。 有关详细信息,请参阅 Intune 中的电信费用管理
  • update_device_attributes - 此 API 权限用于向设备合规性和移动威胁防御合作伙伴Intune发送设备信息。 有关详细信息,请参阅移动威胁防御与Intune和第三方设备合规性合作伙伴的集成。
  • update_device_health - 此 API 权限用于向移动威胁防御合作伙伴Intune发送设备运行状况和威胁状态信息。 有关详细信息,请参阅移动威胁防御与Intune集成

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

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

此时,还可执行以下操作:

  • 选择授予所有租户帐户在不提供凭据的情况下使用应用的权限。

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

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

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

    为此,请执行以下操作:

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

      The Edit manifest blade
    2. 将设置的 availableToOtherTenants 值更改为 true

    3. 保存所做的更改。

Intune权限范围

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

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

若要了解详细信息:

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

启用访问 设置 作用域名称
在 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 Endpoint Manager管理中心中显示的设置。 以下部分按字母顺序描述范围。

目前,所有Intune权限范围都需要管理员访问权限。 这意味着在运行访问Intune API 资源的应用或脚本时,需要相应的凭据。

DeviceManagementApps.Read.All

  • 启用访问 设置:读取Microsoft Intune应用

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

    • 客户端应用
    • 移动应用类别
    • 应用保护策略
    • 应用配置

DeviceManagementApps.ReadWrite.All

  • 启用访问 设置:读取和写入Microsoft Intune应用

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

  • 还允许对以下实体进行更改:

    • 客户端应用
    • 移动应用类别
    • 应用保护策略
    • 应用配置

DeviceManagementConfiguration.Read.All

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

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

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

DeviceManagementConfiguration.ReadWrite.All

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

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

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

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

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

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

    • 角色分配
    • 角色定义

DeviceManagementServiceConfig.Read.All

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

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

    • 设备注册
    • Apple 推送通知证书
    • Apple 设备注册计划
    • Apple 批量购买计划
    • Exchange连接器
    • 条款和条件
    • 电信费用管理
    • 云 PKI
    • 品牌打造
    • 移动威胁防御

DeviceManagementServiceConfig.ReadWrite.All

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

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

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

    • 设备注册
    • Apple 推送通知证书
    • Apple 设备注册计划
    • Apple 批量购买计划
    • Exchange连接器
    • 条款和条件
    • 电信费用管理
    • 云 PKI
    • 品牌打造
    • 移动威胁防御

Azure AD身份验证示例

本部分介绍如何将Azure AD合并到 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 图形 API和权限范围的DeviceManagementManagedDevices.Read.All应用程序 ID。

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

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

在 C 中对Azure AD进行身份验证#

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

备注

Azure Active Directory (Azure AD) 身份验证库 (ADAL) 和Azure AD 图形 API将被弃用。 有关详细信息,请参阅 更新应用程序以使用 Microsoft 身份验证库 (MSAL) 和 Microsoft Graph API

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

  2. 输入项目的名称,并根据需要提供其他详细信息。

    Creating a C# console app project in Visual Studio
  3. 使用解决方案资源管理器将 Microsoft MSAL NuGet包添加到项目:

    1. 右键单击解决方案资源管理器。
    2. 选择 “管理NuGet包... >浏览
    3. 选择 Microsoft.IdentityModel.Clients.ActiveDirectory 并选择 “安装”。
    Selecting the Azure AD identity model module
  4. 将以下语句添加到 Program.cs 的顶部:

    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    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. 更新 Main 以调用 GetMyManagedDevices

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

首次运行程序时,应收到两个提示。 第一个请求凭据,第二个请求授予请求的 managedDevices 权限。

若要参考,下面是已完成的程序:

using Microsoft.IdentityModel.Clients.ActiveDirectory;
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");
        }
    }
}

Azure AD (PowerShell) 进行身份验证

PowerShell 脚本可以使用 AzureAD PowerShell 模块进行身份验证。 若要了解详细信息,请参阅 Azure Active Directory PowerShell 版本 2Intune PowerShell 示例

支持多个租户和合作伙伴

如果你的组织支持具有自己的Azure AD租户的组织,你可能希望允许客户端将应用程序与各自的租户一起使用。

为此,请执行以下操作:

  1. 验证目标Azure AD租户中是否存在客户端帐户。

  2. 验证租户帐户是否允许用户注册应用程序 (查看 用户设置) 。

  3. 在每个租户之间建立关系。

    为此,请执行以下操作:

    a. 使用 Microsoft 合作伙伴中心 定义与客户端及其电子邮件地址的关系。

    b. 邀请用户成为租户的来宾。

若要邀请用户成为租户的来宾,请执行以下操作:

  1. “快速任务”面板中选择 “添加来宾用户”。

    Use Quick Tasks to add a guest user
  2. 输入客户端的电子邮件地址, ((可选)) 为邀请添加个性化邮件。

    Inviting an external user as a guest
  3. 选择 “邀请”。

这会向用户发送邀请。

A sample guest invitation

用户需要选择 入门 链接来接受邀请。

建立关系 (或已接受邀请) 时,请将用户帐户添加到 目录角色

请记得根据需要将用户添加到其他角色。 例如,若要允许用户管理Intune设置,他们需要是 全局管理员Intune服务管理员

此外:

  • 用于https://admin.microsoft.com向用户帐户分配Intune许可证。

  • 更新应用程序代码以向客户端的Azure AD租户域(而不是你自己的租户域)进行身份验证。

    例如,假设租户域为 contosopartner.onmicrosoft.com 租户域且客户端的租户域为 northwind.onmicrosoft.com,则会更新代码以向客户端的租户进行身份验证。

    若要基于前面的示例在 C# 应用程序中执行此操作,请更改变量的 authority 值:

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

    更改为

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