#active-directory #exchange-server #exchangewebservices
#active-directory #exchange-сервер #exchangewebservices
Вопрос:
компания, в которой я работаю, имеет 2 леса Active Directory. Один лес называется us, в который я вхожу утром со своим профилем (us maflorin), а другой лес называется (mail.us ), который предназначен для Exchange.
Я создал asp.net приложение, которое запускается в SharePoint и получает SPContext.Current.Web.CurrentUser.LoginName, который является именем для входа в домен США. (us maflorin, например, для меня). Я хотел бы получить из учетных данных США соответствующий объект в лесу Exchange, чтобы внести изменения в глобальный список адресов (GAL) для пользователя, который открыл страницу после процесса утверждения линейным менеджером.
Я написал следующий рабочий код для получения объекта Exchange, но для поиска объекта он использует два запроса ldap:
private Dictionary<string,AdRecod> FindExchangeAdProperties(string samAccountName,string description)
{
Dictionary<string,AdRecod> properties = null;
if (!string.IsNullOrEmpty(samAccountName))
{
properties = GetUserProperties(@"(amp;(objectCategory=person)(mailNickname="
samAccountName "))");
if (properties != null) return properties;
}
if ((description == "") || (description == "0"))
throw new Exception("No matching Description, couldn't find correct Exchange AD object");
properties = GetUserProperties(@"(amp;(objectCategory=person)(description="
description "))");
return properties;
}
Возможно ли получить объект exchange с помощью одного запроса ldap непосредственно из us sAMAccountName?
Атрибут mailNickname в лесу exchange не всегда совпадает с именем sAMAccountName в лесу сша. Если он не совпадает, я использую второй запрос ldap, чтобы проверить, возвращается ли запись, выполнив запрос в поле описания. Поле описания во многих случаях одинаково для обоих лесов, но иногда администратор изменял его.
Возможно ли более легко найти соответствующий объект Exchange Active Directory для учетных данных домена США? Как Outlook находит из учетных данных США соответствующий почтовый ящик / объект Ad? Я просматривал схему AD с помощью adsiedit, но не смог найти чистое поле, которое используется для связывания двух объектов леса вместе.
Кроме того, я просматривал службу автоматического обнаружения управляемого API веб-служб Exchange (атрибут почтового ящика dn), но вам нужно передать в метод GetUserSettings адрес SMTP, а это поле не заполнено в домене США.
Большое спасибо,
Матиас
Комментарии:
1. Какую версию exchange вы используете?
2. Exchange 2007, спасибо, что изучили этот вопрос
Ответ №1:
Я смог найти ответ на этот вопрос с помощью лучшего подхода, чем приведенный выше, который зависит от соглашения компании об именовании.
В лесу exchange я запускаю запрос LDAP с классом DirectorySearcher, чтобы получить атрибут msExchMasterAccountSid.
Затем следующий код предоставляет правильный sam в лесу, который мы используем для входа в систему:
var sid = directoryEntry.Properties["msExchMasterAccountSid"].Value as byte[];
// no mailbox
if (sid == null) continue;
var sidString = new SecurityIdentifier(sid, 0).ToString();
var samAccountName = "";
using (var context = new PrincipalContext(ContextType.Domain, "US"))
{
var principal = UserPrincipal.FindByIdentity(context, IdentityType.Sid, sidString);
if (principal == null) continue;
samAccountName = principal.SamAccountName;
}