Microsoft Graph for Office 365 - 用例:在Azure AD中创建用户

本文介绍如何使用MicrosoftGraphAPI在AzureAD中自动化创建新用户,包括授予应用权限、修改代码及使用.NETCoreSDK进行用户创建的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

前一篇文章我们完整介绍了一个利用.NET Core命令行程序去调用Microsoft Graph获取用户信息的demo。本篇是上一篇的接续,我们将对前面的应用程序进行扩展,使它支持可以在Azure AD中创建新的用户。
在这里插入图片描述
Microsoft Graph让开发者和IT专业人能够创建横跨众多微软服务的应用和自动化工具,而不需要去对每个单独的服务创建认证上下文或进行调用。Microsoft Graph以代理的角色可以跟许多单独的服务进行交互,简化了开发流程,降低了代码的复杂度。

在许多公司,入职一个新员工的流程是通过检查表或指派任务给多个用户的工作流来管理的,他们可能使用手动的流程去为新员工创建一个新帐户以满足公司的需要。

使用Microsoft Graph,企业创建一个工具集来自动化这些流程成为了可能。在接下来的几篇文章中,我们将对上一篇创建的.Net Core命令行程序进行扩展,使它包含一些使用Microsoft Graph进行自动化的常用的员工入职相关的任务。

本篇我们看一下如何创建一个用户。

创建用户

通过Microsoft Graph创建一个新用户相当的简单。正如文档中描述的那样,需要将一个最小化的用户对象Post到/users/。

我们需要为之前在应用程序注册中创建的应用授予新的权限以支持创建新用户。具体操作步骤为,访问Azure门户,选择Azure AD,然后选择应用程序注册,点击我们之前创建的应用。
在这里插入图片描述
我们可以添加User.ReadWrite.AllDirectory.ReadWrite.All这两个权限中的任意一种,本着最小权限的原则,我们选择添加User.ReadWrite.All这个权限并授权。
在这里插入图片描述
为应用授予权限之后,我们接下来该修改代码了。

我们创建的命令行应用程序使用Microsoft Graph的.Net Core SDK,SDK采用流式API去抽象RESTful API调用的结构,因此代码可能看起来会跟Microsoft Graph API文档描述的略有不同。

注:In software engineering, a fluent interface (as first coined by Eric Evans and Martin Fowler) is a method for designing object oriented APIs based extensively on method chaining with the goal of making the readability of the source code close to that of ordinary written prose, essentially creating a domain-specific language within the interface.

首先,我们需要创建一个表示要创建用户的对象:
在Helpers文件夹内创建一个UserHelper.cs文件,并添加如下代码:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Graph;

namespace ConsoleGraphTest
{
    public class UserHelper
    {
        private GraphServiceClient _graphClient;
        public UserHelper(GraphServiceClient graphClient)
        {
            if (null == graphClient) throw new ArgumentNullException(nameof(graphClient));
            _graphClient = graphClient;
        }

        public async Task CreateUser(string displayName, string alias, string domain, string password)
        {
            var userToAdd = BuildUserToAdd(displayName, alias, domain, password);
            await _graphClient.Users.Request().AddAsync(userToAdd);
        }

        public async Task<User> FindByAlias(string alias)
        {
            List<QueryOption> queryOptions = new List<QueryOption>
            {
                new QueryOption("$filter", $@"mailNickname eq '{alias}'")
            };

            var userResult = await _graphClient.Users.Request(queryOptions).GetAsync();
            if (userResult.Count != 1) throw new ApplicationException($"Unable to find a user with the alias {alias}");
            return userResult[0];
        }

        private static User BuildUserToAdd(string displayName, string alias, string domain, string password)
        {
            var passwordProfile = new PasswordProfile
            {
                Password = password,
                ForceChangePasswordNextSignIn = true
            };
            var user = new User
            {
                DisplayName = displayName,
                UserPrincipalName = $@"{alias}@{domain}",
                MailNickname = alias,
                AccountEnabled = true,
                PasswordProfile = passwordProfile
            };
            return user;
        }
    }
}

类包含了创建最小用户配置文件的代码,为新用户提供了提供了别名、域、显示名和密码这几个字段,用来加载用户对象。代码主要用来构建用户对象,然后使用GraphServiceClient类,通过BuildUserToAdd方法去创建用户。

以下几点需要注意:

  • 提供的域名必须跟Azure AD租户关联的域相匹配
  • 提供的别名必须在目标Azure AD租户中唯一
  • 用户将在Azure AD中创建后立即启用,可以直接使用
  • 用户在登录时必须要修改密码

接下来我们需要在Program类中调用UserHelper类去实际创建一个用户。在Program类中添加一个新的名为CreateAndFindNewUser的方法,定义如下:

private static void CreateAndFindNewUser(IConfigurationRoot config)
{
    const string alias = "sdk_test";
    string domain = config["domain"];
    var userHelper = new UserHelper(_graphServiceClient);
    userHelper.CreateUser("SDK Test User", alias, domain, "ChangeThis!0").GetAwaiter().GetResult();
    var user = userHelper.FindByAlias(alias).Result;
    // Console writes for demo purposes
    Console.WriteLine(user.DisplayName);
    Console.WriteLine(user.UserPrincipalName);
}

该方法使用UserHelper类在Azure AD中创建一个新用户。它需要读取domain这个参数配置,因此我们需要在appsettings.json中添加一行domain的信息。完整的setting信息如下所示:

{
  "applicationId": "451912ea-1728-4fc5-b27d-453821c61aa1",
  "applicationSecret": "u(6OCN;krp_8)+ZVs2QqOsp=qtclv-Txd10v1[;",
  "tenantId": "c10ade6e-bb7a-4ffc-bad2-b86a17108640",
  "redirectUri": "https://localhost:8080",
  "domain": "yourdomain.onmicrosoft.com"
}

然后在Main方法中添加CreateAndFindNewUser(config);去调用上面新添加的方法,最后保存文件。

我们本篇要介绍的代码就完成了,执行一下看看。
在这里插入图片描述
我们可以到域里面去查看我们创建的用户。
在这里插入图片描述
本篇内容就到这里,示例代码可以戳这里下载。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值