如何使用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 身份验证示例。
介绍如何支持多个租户。
若要了解详细信息,请参阅:
- 使用 OAuth 2.0 和 Azure Active Directory 授权访问 Web 应用程序
- Azure AD身份验证入门
- 将应用程序与Azure Active Directory集成
- 了解 OAuth 2.0
注册应用以使用 Microsoft Graph API
注册应用以使用 Microsoft Graph API:
使用管理凭据登录到 Microsoft Endpoint Manager 管理中心。
根据需要可以使用:
- 租户管理员帐户。
- 具有用户的租户用户帐户 可以注册 启用的应用程序设置。
选择 所有 servicesM365 > Azure Active Directory > Azure Active Directory > 应用注册。
选择 “新建注册”,以创建新的应用程序,或选择现有应用程序。 (如果选择现有应用程序,请跳过下一步。)
在 “注册应用程序 ”窗格中,指定以下内容:
用户登录) 时 (显示应用程序的 名称 。
支持的帐户类型。
重定向 URI 值。 此值为选项。
备注
Azure Active Directory (Azure AD) 身份验证库 (ADAL) 和Azure AD 图形 API将被弃用。 有关详细信息,请参阅 更新应用程序以使用 Microsoft 身份验证库 (MSAL) 和 Microsoft Graph API。
若要了解详细信息,请参阅Azure AD的身份验证方案。
从应用程序窗格中:
请注意 应用程序 (客户端) ID 值。
选择 API 权限。
在 “API 权限”窗格中,选择 “添加 permissionMicrosoft > APIMicrosoft > Graph。 然后,选择应用程序所需的权限类型。
通过将复选标记放置在相关名称的左侧,选择应用所需的角色。 若要了解特定Intune权限范围,请参阅Intune权限范围。 若要了解其他图形 API权限范围,请参阅 Microsoft Graph权限参考。
为获得最佳效果,请选择实现应用程序所需的最少角色。
数据仓库和报告权限
通过Azure Active Directory管理中心添加应用程序时,可以根据应用程序的要求选择Intune API 权限。
- get_data_warehouse - 使用此 API 权限从Microsoft Intune授予对Intune数据仓库 API 的访问权限。 有关详细信息,请参阅“使用Microsoft Intune Data Warehouse。
合作伙伴解决方案 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 智能安全协会]团队联系以获取信息。
完成后,选择 “添加权 限”以保存所做的更改。
此时,还可执行以下操作:
选择授予所有租户帐户在不提供凭据的情况下使用应用的权限。
为此,可选择“授予权限”并接受确认提示。
首次运行应用程序时,系统会提示你授予应用执行所选角色的权限。
使应用可供租户外部的用户使用。 (通常仅支持多个租户/组织的合作伙伴才需要此功能。)
为此,请执行以下操作:
从应用程序窗格中选择 清单 。
将设置的
availableToOtherTenants值更改为true。保存所做的更改。
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。
启动Visual Studio,然后 (.NET Framework) 项目创建新的 Visual C# 控制台应用。
输入项目的名称,并根据需要提供其他详细信息。
使用解决方案资源管理器将 Microsoft MSAL NuGet包添加到项目:
- 右键单击解决方案资源管理器。
- 选择 “管理NuGet包... >浏览。
- 选择
Microsoft.IdentityModel.Clients.ActiveDirectory并选择 “安装”。
将以下语句添加到 Program.cs 的顶部:
using Microsoft.IdentityModel.Clients.ActiveDirectory; using System.Net.Http;添加用于创建授权标头的方法:
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值匹配的值,如前面所述。添加用于检索设备列表的方法:
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"); }更新 Main 以调用 GetMyManagedDevices:
string devices = GetMyManagedDevices().GetAwaiter().GetResult(); Console.WriteLine(devices);编译并运行程序。
首次运行程序时,应收到两个提示。 第一个请求凭据,第二个请求授予请求的 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 版本 2 和 Intune PowerShell 示例。
支持多个租户和合作伙伴
如果你的组织支持具有自己的Azure AD租户的组织,你可能希望允许客户端将应用程序与各自的租户一起使用。
为此,请执行以下操作:
验证目标Azure AD租户中是否存在客户端帐户。
验证租户帐户是否允许用户注册应用程序 (查看 用户设置) 。
在每个租户之间建立关系。
为此,请执行以下操作:
a. 使用 Microsoft 合作伙伴中心 定义与客户端及其电子邮件地址的关系。
b. 邀请用户成为租户的来宾。
若要邀请用户成为租户的来宾,请执行以下操作:
从 “快速任务”面板中选择 “添加来宾用户”。
输入客户端的电子邮件地址, ((可选)) 为邀请添加个性化邮件。
选择 “邀请”。
这会向用户发送邀请。
用户需要选择 入门 链接来接受邀请。
建立关系 (或已接受邀请) 时,请将用户帐户添加到 目录角色。
请记得根据需要将用户添加到其他角色。 例如,若要允许用户管理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/";