我的网络管理员已在MS Windows Server 2008上配置了Local(on Prem)MS Active Directory,现在它们已在混合模式下移动到Azure Active Directory,例如保持两个目录同步。
之前,我已经写了一个Windows服务,以在安装MS AD的机器上运行,而该服务实际上所做的是如下
1:在启动服务之前设置配置
2:服务在指定的间隔后运行,并从本地Intranet Web服务器中检索用户,该服务器需要在AD上更新。(用户形式,名称,图像等)
3:从Intranet Web服务器检索到的用户具有唯一的名称,并且已经在本地广告上映射了,因此我在广告上搜索了cn ='cn =&quort'
的用户。4:成功搜索后,我可以拥有用户目录的实例,并且可以更新其缩略图照片。
以下是简短的代码
foreach (var userInDB in usersList)
{
string webServerAddress = ConfigurationManager.AppSettings["WebserverAddress"];
string ImagePath = webServerAddress + userInDB.ImagePath;
try
{
using (DirectorySearcher dsSearcher = new DirectorySearcher(myLdapConnection))
{
dsSearcher.Filter = "(&(objectClass=user) (cn="+ userInDB.UserName+"))";
SearchResult result = dsSearcher.FindOne();
if (result != null)
{
using (DirectoryEntry user = new DirectoryEntry(result.Path))
{
using (var webClient = new WebClient())
{
byte[] userImage = webClient.DownloadData(ImagePath);
byte[] userImageThumbnail =CreateThumbnail(userImage,96);
Log4Net.WriteLog("Image File Converted to bytes", LogType.GENERALLOG);
user.Properties["thumbnailPhoto"].Clear();
user.Properties["thumbnailPhoto"].Add(userImageThumbnail);
user.CommitChanges();
}
}
new UserServices().UpdateUser(userInDB.UserId);
}
else
{
}
}
}
catch (Exception ex)
{
Log4Net.WriteException(ex);
}
}
到目前为止,该服务运行完美,并从本地广告上的本地Intranet Web服务器同步我的用户映像。
现在,进入Azure AD,我想在Azure AD上同步相同的图像。快速r& d后,我来了以下解决方案
1:我可以使用图形API并使用以下HTTP请求
更新用户PATCH /users/{id | userPrincipalName}/photo/$value
我对此解决方案的关注如下
1: dis userprincipalname和cn是常见的身份(我对网络管理的了解很低,而且我没有配置那些本地AD和Azure AD,所以我不知道如何如何来本地广告与Azure AD同步)。我需要确保通过提供相同的用户名(对于用户principalname)访问Azure AD中的用户,我用来在本地AD(对于CN)中访问它。
2:我的第二个问题是,当我经过有关配置MS图API的文档时,例如
(i)注册您的应用。
(ii)在您的应用程序上为Microsoft Graph配置权限。
(iii)获得管理员同意。
(iv)获取访问令牌。
(v)使用访问令牌调用Microsoft Graph。
我不完全理解第三点,例如在指定的间隔之后,该方案如何适合自行运行的Windows服务?获得管理员同意并以后使用该服务是一次工作。是否有一个方案,我们可以一次获得一次注册应用程序的管理员同意(最好是在单独的应用程序中),并使用Windows服务以稍后访问Azure AD,而无需任何问题。
3:我对整个情况的第三个也是最后一个担忧是" 我真的需要做这一切?&quort'
我经历了一些文章,例如
https://support.office.com/en-ie/article/active-directory-connect-andnect-and-connect-and-365-856f2f2f2f62-a6e8-4ab0-4ab0-817b-817b-adabd8f27332
说明Active Directory Connect和Office 365. Windows Service上的PREM AD上的本地广告并配置Azure AD以自动更新(同步),例如让它在网络管理员上以配置两个目录以自动进入同步。
我真的需要分别更新本地广告和Azure广告吗?(在单个Windows服务或2个Windows服务中?)
底线:我是Azure AD甚至AD的新手,上面的描述是我的快速R& d的结果,我尚未开发完整的环境来实现解决方案,例如获取Office 365的免费开发人员帐户,在Windows Server上设置本地广告,在Microsoft App注册门户网站上注册我的应用程序,然后完成工作的其余工作。因为在继续前进和设置环境之前,我需要从我要朝正确方向的Azure AD的专家那里开始,并且哪种解决方案适合上述方案。要再次重复"我想将用户的映像从我的本地Intranet Web服务器更新为Azure AD&quort"
请建议我最好的行。
thanx和问候,
您的问题中有许多问题,但我会尝试解决每个部分:
1:用户principalname和cn是常见的身份
是的,您的广告应具有每个用户的用户principalname。您应该能够查找用户,然后从广告中获取UPN。
2:获得管理员同意并以后使用该服务是一次工作。是否有一个方案,我们可以获得一次注册应用程序的管理员同意(最好是在单独的应用程序中),并使用Windows服务稍后访问Azure AD,而无需任何问题。
是的,管理员同意申请是一次(除非您需要更改权限范围)。对于这种类型的解决方案(否UI),您应该考虑使用客户端凭证与授权身份验证。借助客户端凭据,您可以获得应用程序ID和秘密,并在每次需要时使用这些应用程序来获得访问令牌。您不需要用户作为身份验证流的一部分登录&您无需处理刷新令牌。客户凭证验证流
3:我对整个情况的第三个也是最后一个担忧是"我真的需要做这一切吗?"
您可能会悲伤。AD Connect将Thumbnailphoto同步到AAD,但是,如果用户在O365中更新照片,则缩略图将不再从AAD到Office 365(EXO/SPO)再次自动同步。这会破坏同步,您可能需要将照片推到Microsoft图表上,如果用户有一个邮箱,这将使照片放在EXO中,这是O365的大部分o365从中拿出照片的位置。简短的答案,是的,您可能应该。