如何通过C#调用Microsoft Graph API获取分配给用户的服务主体Assignment ID
获取用户关联服务主体的Assignment ID(C#调用Microsoft Graph实现)
前置准备
- 首先在Azure Portal中给你的应用配置对应的Graph API权限,需至少授予
AppRoleAssignment.Read.All应用权限(若后续需要删除分配,可授予AppRoleAssignment.ReadWrite.All权限),并完成管理员同意。 - 安装所需NuGet包:
Install-Package Microsoft.Graph Install-Package Azure.Identity
核心实现逻辑
你需要调用的是Microsoft Graph的用户应用角色分配接口,返回结果中的id字段即为你需要的Assignment ID,你可以通过返回结果中的resourceDisplayName(服务主体名称)或resourceId(服务主体对象ID)过滤得到指定服务主体对应的分配ID。
示例代码
using Azure.Identity; using Microsoft.Graph; using Microsoft.Graph.Models; // 初始化Graph客户端 var scopes = new[] { "https://graph.microsoft.com/.default" }; var tenantId = "你的Azure AD租户ID"; var clientId = "你的应用客户端ID"; var clientSecret = "你的应用客户端密钥"; var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(clientSecretCredential, scopes); try { // 替换为目标用户的ID或者用户主体名称(user@domain.com) string targetUserId = "目标用户ID"; // 替换为目标服务主体的对象ID(可选,用于过滤特定服务主体) string targetServicePrincipalObjectId = "目标服务主体对象ID"; // 获取该用户的所有应用角色分配 var appRoleAssignments = await graphClient.Users[targetUserId].AppRoleAssignments.GetAsync(); if (appRoleAssignments?.Value != null) { foreach (var assignment in appRoleAssignments.Value) { // 过滤指定服务主体的分配(如果不需要过滤可以去掉该判断) if (assignment.ResourceId.ToString() == targetServicePrincipalObjectId) { Console.WriteLine($"找到对应Assignment ID:{assignment.Id}"); Console.WriteLine($"服务主体名称:{assignment.ResourceDisplayName}"); Console.WriteLine($"分配的应用角色ID:{assignment.AppRoleId}"); } } } } catch (Exception ex) { Console.WriteLine($"请求出错:{ex.Message}"); }
字段说明
- 接口返回的
AppRoleAssignment对象中,id就是你需要的Assignment ID,可直接用于后续的删除、查询等操作。 principalId为分配对象的ID,此处对应用户的对象ID。resourceId为被分配的资源ID,此处对应服务主体的对象ID。
内容的提问来源于stack exchange,提问作者user11718626
相关产品推荐
相关产品推荐

