Microsoft Graph for Office 365 - 用例:分配一个Office 365 许可

博客地址:http://blog.csdn.net/FoxDave

上一篇文章我们实现了在.Net Core应用程序中去创建一个用户。本篇我们将实现分配给用户一个Office 365许可 (license) 的操作。

我们可以通过请求/Users/assignLicense终结点去为Office 365用户分配一个许可。当然不仅是分配许可,我们还可以移除许可或是启用\禁用某个许可中特定的plan。本文中我们只演示如何分配一个许可。

所需权限

要想分配或移除一个许可,需要User.ReadWrite.AllDirectory.ReadWrite.All权限。在进行分配或移除许可之前,我们首先必须知道租户内有哪些可用的许可,这些许可也叫做订阅SKUs,可以通过请求/subscriberSkus终结点获得,需要Directory.Read.AllDirectory.ReadWrite.All权限。为了简化我们本篇演示中需要的权限,我们将使用Directory.ReadWrite.All权限。

那么首先要做的操作就是到Azure AD的应用程序注册中去进行授权并由管理员批准。
Microsoft Graph for Office 365 - 用例:分配一个Office 365 许可_第1张图片
接下来就是添加必要的代码了,在GraphDemo项目的Helpers文件夹里新建一个文件LicenseHelper.cs,用于本篇的示例代码演示。
Microsoft Graph for Office 365 - 用例:分配一个Office 365 许可_第2张图片

获取用户

分配许可的第一步是获取要被分配许可的用户。我们通过UPN查找一个用户,代码如下,将此代码添加到之前创建的UserHelper.cs文件中:

public async Task GetUser(string UPN)
        {
            var user = await _graphClient.Users[UPN].Request().GetAsync();
            return user;
        }

获取许可 (订阅SKUs)

第二步就是获取一个租户中许可的引用。如果我们知道某个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();
        }
    }
}

示例代码已更新,戳这里。

在这里插入图片描述

你可能感兴趣的:(Microsoft,365,Microsoft,Graph,Microsoft,Graph,30天训练营中文版,Microsoft,Graph,Office,365)