gpt4 book ai didi

c# - 使用 Active Directory Graph API 进行用户电子邮件地址操作

转载 作者:行者123 更新时间:2023-12-03 04:42:08 27 4
gpt4 key购买 nike

我目前在 C# 云服务应用程序中使用 Microsoft.Azure.ActiveDirectory.GraphClient,该应用程序根据数据库中存储的信息管理用户配置并更新 Office 365 中的用户。

我面临的问题是用户邮件地址的设置。在配置新用户时,设置新用户对象的邮件地址属性会导致图形客户端抛出错误。配置新用户时,主 SMTP 地址会自动设置为该用户的 UPN。以下代码将成功创建新用户并将主 SMTP 地址设置为与 UserPrincipalName 设置的值相同:

IUser newUser = new User();
newUser.DisplayName = "Firstname Surname";
newUser.UserPrincipalName = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c3b0acaea6acada683b0acaea6b4aba6b1a6eda0acae" rel="noreferrer noopener nofollow">[email protected]</a>";
newUser.AccountEnabled = true;
newUser.MailNickname = "firstnamesurname";
newUser.ImmutableId = "0k3otwAAEkm8vGSKbJqRZg==";
newUser.PasswordProfile = new PasswordProfile
{
Password = "somerandompassword",
ForceChangePasswordNextLogin = true
};
newUser.UsageLocation = "GB";
_activeDirectoryClient.Users.AddUserAsync(newUser).Wait();

很公平 - UPN 和主电子邮件地址不匹配可能会导致自动发现问题。

我遇到的问题是,在更新用户时设置用户对象的“mail”属性也会引发错误。

以下代码将成功更新用户:

User retrievedUser = new User();
List<IUser> retrievedUsers = null;
retrievedUsers = _activeDirectoryClient.Users
.Where(searchUser => searchUser.ImmutableId.Equals(0k3otwAAEkm8vGSKbJqRZg==))
.ExecuteAsync().Result.CurrentPage.ToList();
if (retrievedUsers != null && retrievedUsers.Count == 1)
{
retrievedUser = (User)retrievedUsers.First();
retrievedUser.UserPrincipalName = "someone<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="122352617d7f77657a7760773c717d7f" rel="noreferrer noopener nofollow">[email protected]</a>";
retrievedUser.UpdateAsync().Wait();
}

以上代码将更改用户的 UPN,但不会像添加新用户场景中那样更新主 SMTP 地址。我不明白这一点,因为它可能会导致自动发现问题(因为 UPN 与主 SMTP 地址不同),并否定创建新用户时无法设置邮件地址的任何原因。

我找不到有关如何更新用户电子邮件地址或将其他电子邮件地址设置为主 SMTP 地址的任何详细信息。此要求的场景例如当用户结婚并且他们想要一个新的电子邮件地址作为其主电子邮件地址时。

有人知道如何使用 Microsoft.Azure.ActiveDirectory.GraphClient 管理用户的主 SMTP 地址吗?我可以找到有关设置其他电子邮件地址的信息,但找不到有关如何更改主 SMTP 地址的信息。

感谢您的帮助!

最佳答案

根据我自己的测试,通过 AzureAD Graph API 对 userPrincipalName 的更新自动更新以下属性:

  • 邮件
  • userPrincipalName
  • 代理地址

更新 proxyAddresses 属性,将新的 userPrincipalName 包含为新的主 SMTP 地址,旧的主地址将被保留,但不再是主地址。这也反射(reflect)在 Exchange Online 中。以 SMTP:(大写)为前缀的 proxyAddress 是 PrimarySmtpAddress。

作为一种边缘情况,如果之前的主地址与之前的 UPN不同,则不会发生此过程。如果 UPN 和 PrimarySmtpAddress 不匹配,则当通过 AzureAD Graph API 更新 UPN 时, UPN 将被添加为非主地址,并且原来的主要地址仍将是主要地址。

据我所知,这种行为没有记录。然而,这里记录了类似的内容:https://support.microsoft.com/en-us/help/3190357/how-the-proxyaddresses-attribute-is-populated-in-azure-ad 。似乎哪个属性的优先级决定了 PrimarySmtpAddress 的 mail > UPN > mailNickName

一般来说,我认为直接操作 proxyAddresses 不是一个好主意,因为 Exchange/AD 已经为您做了很多这样的事情。

关于c# - 使用 Active Directory Graph API 进行用户电子邮件地址操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580792/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com