寻求支持Application权限的Microsoft Graph API以更新AAD设备所有权
使用Microsoft Graph应用权限更新AAD设备所有权
操作步骤与解决方案
- 配置应用权限:在Azure AD应用注册中添加
Device.ReadWrite.All应用权限,完成管理员同意后,后台服务就能以应用身份读写所有AAD设备资源。 - 替换认证方式:弃用需要用户交互的
InteractiveBrowserCredential,改用客户端凭证模式实例化GraphServiceClient,实现无用户参与的后台认证。 - 调用所有者更新接口:尽管官方文档标注
device-post-registeredowners需要委派权限,但持有Device.ReadWrite.All应用权限时,同样可通过添加/移除所有者引用的方式完成所有权变更,以下是C#示例代码:
using Azure.Identity; using Microsoft.Graph; var tenantId = "你的租户ID"; var clientId = "你的应用注册Client ID"; var clientSecret = "你的应用注册Client Secret"; // 初始化无交互的Graph客户端 var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(credential); // 示例1:为指定设备添加新所有者 var targetDeviceId = "目标设备的ID"; var newOwnerUserId = "要设置为所有者的用户ID"; await graphClient.Devices[targetDeviceId].RegisteredOwners.References.Request().AddAsync(new User { Id = newOwnerUserId }); // 示例2:替换设备所有现有所有者 var existingOwners = await graphClient.Devices[targetDeviceId].RegisteredOwners.Request().GetAsync(); foreach (var owner in existingOwners) { await graphClient.Devices[targetDeviceId].RegisteredOwners[owner.Id].References.Request().DeleteAsync(); } await graphClient.Devices[targetDeviceId].RegisteredOwners.References.Request().AddAsync(new User { Id = newOwnerUserId });
关键注意事项
- 必须确保应用注册的
Device.ReadWrite.All权限已获得管理员同意,否则会触发权限不足的错误。 - 设备未被Intune管理不影响该操作,此操作直接针对AAD设备对象,与Intune管理无关。
- 若需要完全替换所有权,需先删除现有所有者的引用,再添加新的用户引用。
内容的提问来源于stack exchange,提问作者Vishal Anand
相关产品推荐
相关产品推荐

