我有一个正在编写的连接的控制台应用程序,可帮助自动化即将进行的租户迁移。
我要做的是从当前租户中删除所有自定义域的关联,以便将其添加到新租户中。
到目前为止我所拥有的:
ConsoleApp已向AAD注册,并且已分配API权限并获得同意。
我已导入以下内容:
using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client
初始化graphClient
:
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
并成功调用了图形的.GetAsync
。
我需要什么帮助:
我正在尝试将网上论坛的电子邮件更新为'gItem.mailNickname@tenantID'
。我说“邮件字段为只读”时出错。通过图形浏览器,我注意到proxyAddresses
字段包含了该组的所有别名,并且邮件被列为“ SMPT:...”,我试图用以下方式覆盖proxyAddresses
字段
var upGroup = await graphClient
.Groups["4f629be4-f592-4520-b80d-7570f68e276e"]
.Request()
.GetAsync();
var updateFields = new Group
{
ProxyAddresses = new List<string>()
{
"SMPT:" + upGroup.MailNickname + "@" + tenantID,
}
};
await graphClient
.Groups[upGroup.Id]
.Request()
.UpdateAsync(updateFields);
我得到一个错误,即权限不足,但是已经检查了AAD以确保Directory.ReadWrite.All
和Groups.ReadWrite.All
都已配置和授予。
其他网上论坛属性可以更改,这使我对proxyAddresses
属性的结构提出疑问。
无法添加到列表中的代码
var updateFields = new Group
{
ProxyAddresses = new string[] { "SMTP:" + upGroup.MailNickname + "@" + tenantID }
};
完整代码:
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client;
namespace RemoveGroupAliases
{
class Program
{
private static string clientId = "";
private static string tenantID = "";
private static string clientSecret = "";
private static IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithTenantId(tenantID)
.WithClientSecret(clientSecret)
.Build();
static ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);
static async Task Main(string[] args)
{
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
var groups = await graphClient
.Groups
.Request()
.Filter("mailEnabled+eq+true")
.GetAsync();
foreach (var tgroup in groups)
{
Console.WriteLine(tgroup.Id);
Console.WriteLine(tgroup.DisplayName);
};
var upGroup = await graphClient
.Groups["4f629be4-f592-4520-b80d-7570f68e276e"]
.Request()
.GetAsync();
var updateFields = new Group
{
ProxyAddresses = new List<String>()
{
"SMTP:" + upGroup.MailNickname + "@" + tenantID
}
};
await graphClient
.Groups[upGroup.Id]
.Request()
.UpdateAsync(updateFields);
Console.ReadLine();
}
}
}
该想法是拉出所有启用邮件的组并删除所有域,以便我可以从此租户中将其删除并将其与新租户相关联。域切换后,我将使用其他程序来分配域和别名。当我将鼠标悬停在proxyAddresses
的工具提示上时,最后一行显示“只读”,这可能是我的问题,但我没有把它当作错误。
答案 0 :(得分:0)
您所描述的场景根本不可能。您不能从一个租户分离组(或实际上是任何数据)并将其迁移到另一个租户。每个AAD租户都是一个独立的实体,并且与任何其他租户隔离。
Microsoft Graph使用您提供的令牌将请求路由到生成令牌的租户内的正确API /服务。您不能将单个令牌连接到多个租户。
此外,如documentation中所述,属性mail
和proxyAddresses
是只读的。如果您想更改组的电子邮件别名,则可以可以更改mailNickname
属性。这只是组的“别名”,电子邮件地址的域部分由AAD和Exchange({mailNickname}@{default.tenant.domain}
)自动分配。