如何在Microsoft Graph API 5.19版本(C#)中分配许可证?
如何在Microsoft Graph API 5.19版本(C#)中分配许可证?
嘿,我完全懂你找不到Graph API v5+版本分配许可证方法的苦恼——毕竟版本迭代后不少旧的API调用方式都变了。下面我给你一步步拆解具体操作:
先做好准备工作
- 确保你已经安装了Microsoft Graph的NuGet包,版本5.19及以上;
- 确认你的应用/账户拥有足够的权限:比如应用权限需要
Directory.ReadWrite.All,委托权限需要User.ReadWrite.All或Directory.ReadWrite.All,而且这些权限需要管理员提前同意。
核心代码实现
首先你需要初始化GraphServiceClient(这里以客户端凭据模式为例,你也可以根据自己的认证方式调整):
using Microsoft.Graph; using Azure.Identity; // 替换成你自己的租户、应用信息 var tenantId = "你的租户ID"; var clientId = "你的应用注册ID"; var clientSecret = "你的应用密钥"; var scopes = new[] { "https://graph.microsoft.com/.default" }; var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(credential, scopes);
接下来就是分配许可证的关键逻辑:
try { // 1. 定义要分配的许可证(替换成你实际的SKU ID) var licensesToAdd = new List<AssignedLicense> { new AssignedLicense { SkuId = Guid.Parse("xxx-xxx-xxx-xxx-xxx") // 许可证的SKU GUID } }; // 2. 如果需要移除用户已有的某些许可证,在这里添加对应的SKU ID,否则留空列表 var licensesToRemove = new List<Guid>(); // 3. 调用API分配许可证 await graphClient.Users["目标用户的ID或UPN(比如user@domain.com)"] .AssignLicense .PostAsync(new AssignLicensePostRequestBody { AddLicenses = licensesToAdd, RemoveLicenses = licensesToRemove }); Console.WriteLine("许可证分配成功啦!"); } catch (Exception ex) { Console.WriteLine($"分配失败:{ex.Message}"); }
小提示:怎么获取许可证的SKU ID?
你可以通过调用Graph API获取租户内所有可用的许可证SKU,代码示例如下:
var subscribedSkus = await graphClient.SubscribedSkus.GetAsync(); foreach (var sku in subscribedSkus.Value) { Console.WriteLine($"SKU名称:{sku.SkuPartNumber},ID:{sku.SkuId}"); }
运行这段代码就能拿到所有可用许可证的SKU ID,直接替换到上面的分配代码里就行。
备注:内容来源于stack exchange,提问作者Doruk Han
相关产品推荐
相关产品推荐

