博客地址:http://blog.csdn.net/FoxDave
上一篇文章我们实现了在.Net Core应用程序中去创建一个用户。本篇我们将实现分配给用户一个Office 365许可 (license) 的操作。
我们可以通过请求/Users/assignLicense终结点去为Office 365用户分配一个许可。当然不仅是分配许可,我们还可以移除许可或是启用\禁用某个许可中特定的plan。本文中我们只演示如何分配一个许可。
要想分配或移除一个许可,需要User.ReadWrite.All或Directory.ReadWrite.All权限。在进行分配或移除许可之前,我们首先必须知道租户内有哪些可用的许可,这些许可也叫做订阅SKUs,可以通过请求/subscriberSkus终结点获得,需要Directory.Read.All或Directory.ReadWrite.All权限。为了简化我们本篇演示中需要的权限,我们将使用Directory.ReadWrite.All权限。
那么首先要做的操作就是到Azure AD的应用程序注册中去进行授权并由管理员批准。
接下来就是添加必要的代码了,在GraphDemo项目的Helpers文件夹里新建一个文件LicenseHelper.cs,用于本篇的示例代码演示。
分配许可的第一步是获取要被分配许可的用户。我们通过UPN查找一个用户,代码如下,将此代码添加到之前创建的UserHelper.cs文件中:
public async Task GetUser(string UPN)
{
var user = await _graphClient.Users[UPN].Request().GetAsync();
return user;
}
第二步就是获取一个租户中许可的引用。如果我们知道某个SKU的确定的内部名称,可以直接查询,但是大多数时候内部名称跟显示名称是不同的 (例如:ENTERPRISEPREMIUM的显示名为Office 365 Enterprise E5)。因此在本文的示例中我们只是简单的查询所有的SKUs并选择返回结果的第一条或其中的某一条,将以下代码添加到LicenseHelper.cs文件中。
public async Task GetLicense()
{
var skuResult = await _graphClient.SubscribedSkus.Request().GetAsync();
return skuResult[0];
}
最后一步就是构建包含要添加和移除的许可的请求,代码如下,同样添加到LicenseHelper.cs文件中:
public async Task AddLicense(string userId, Guid? skuId)
{
var licensesToAdd = new List();
var licensesToRemove = new List();
var license = new AssignedLicense()
{
SkuId = skuId,
};
licensesToAdd.Add(license);
await _graphClient.Users[userId].AssignLicense(licensesToAdd, licensesToRemove).Request().PostAsync();
}
最后在Program.cs文件中进行调用,添加如下方法:
private static void AddLicenseToUser(IConfigurationRoot config)
{
string alias = "";
string domain = config["domain"];
string upn = $"{alias}@{domain}";
var userHelper = new UserHelper(_graphServiceClient);
var user = userHelper.GetUser(upn).Result;
var licenseHelper = new LicenseHelper(_graphServiceClient);
var sku = licenseHelper.GetLicense().Result;
licenseHelper.AddLicense(user.Id, sku.SkuId).GetAwaiter().GetResult();
}
注意:请将代码中的"
在Main函数中调用只需要一句话即可:
AddLicenseToUser(config);
全部修改完后F5运行一下看结果。
以上就是本篇涉及到的核心代码,完整的LicenseHelper.cs文件的代码如下所示。Enjoy!
using Microsoft.Graph;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace GraphDemo
{
public class LicenseHelper
{
private GraphServiceClient _graphClient;
public LicenseHelper(GraphServiceClient graphClient)
{
if (null == graphClient) throw new ArgumentNullException(nameof(graphClient));
_graphClient = graphClient;
}
public async Task GetLicense()
{
var skuResult = await _graphClient.SubscribedSkus.Request().GetAsync();
return skuResult[0];
}
public async Task AddLicense(string userId, Guid? skuId)
{
var licensesToAdd = new List();
var licensesToRemove = new List();
var license = new AssignedLicense()
{
SkuId = skuId,
};
licensesToAdd.Add(license);
await _graphClient.Users[userId].AssignLicense(licensesToAdd, licensesToRemove).Request().PostAsync();
}
}
}
示例代码已更新,戳这里。