Есть ли способ включить отслеживание рефералов для UserPrincipal.FindByIdentity ()? - PullRequest
5 голосов
/ 07 апреля 2011

У меня есть веб-приложение .NET 3.5, которое использует классы System.DirectoryServices.AccountManagement. Когда я ищу некоторых пользователей, я получаю исключение PrincipalOperationException: реферал был возвращен с сервера. Если бы я делал это по-старому, используя свой собственный код LDAP, я мог бы включить поиск рефералов. Нужно ли переписывать мой код?

Мой код выглядит так:

   using (var principalContext = new PrincipalContext(ContextType.Domain, null, adPath))
    {

        // Find the principal object for which you wish to enumerate group
        // membership.
        using (var userPrincipal = UserPrincipal.FindByIdentity(principalContext, identity))
        {
            if (userPrincipal != null)
            {
                Name = userPrincipal.DisplayName;
                DistinguishedName = userPrincipal.DistinguishedName;
                EmailAddress = userPrincipal.EmailAddress;
                Sid = userPrincipal.Sid.Value;
            }
        }
    }

Мой adPath может иметь одно из двух значений. Одним из значений является недавно присоединенный домен, доступ к которому можно получить с помощью различных инструментов. Я полагаю, что это проблема с тем, как эта библиотека .NET выполняет вызовы LDAP.

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Вот частичный ответ, так как он слишком длинный для комментария.

Согласно этой документации Microsoft , как вы даже знаете, Рефералы являются подсказкой, которую может преследовать клиент. Но что касается RODC, они добавляют " Например, в случае приложения LDAP, если в соединении LDAP между клиентом и RODC разрешено использование ссылок, приложение никогда не знает, что клиент получил ссылку от RODC. Клиент автоматически перенаправляется на доступный для записи контроллер домена, указанный в ссылке.".

Итак, я смотрю, как включить отслеживание LDAP для соединения на сайте Microsoft, и Я нашел это , что означает использование ADSI. Я очень заинтересован в ответе.

Вы пытаетесь запросить глобальный каталог, как это:

/* Retreiving a principal context
 */
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "YourGCServer:3268", "dc=dom,dc=fr", "User", "Password");

Он должен содержать все данные лесного домена. Надеюсь, это поможет.

0 голосов
/ 13 сентября 2012

Вы пробовали код формы ( укажите домен в качестве второго аргумента ):

var principalContext = new PrincipalContext(ContextType.Domain, "office.local", "OU=Users, DC=office, DC=local" ))

Также убедитесь, что adPath от наиболее конкретного к наименее конкретному.

...