Доступ к Active Directory в ASP.NET? - PullRequest
       51

Доступ к Active Directory в ASP.NET?

6 голосов
/ 08 декабря 2008

Я использую консольное приложение, чтобы написать тестовый код:

    /// <summary>
    /// Returns AD information for a specified userID.
    /// </summary>
    /// <param name="ntID"></param>
    /// <returns></returns>
    public ADUser GetUser(string ntID)
    {            
        DirectorySearcher search = new DirectorySearcher();         
        search.Filter = String.Format("(cn={0})", ntID);

        search.PropertiesToLoad.Add("mail");
        search.PropertiesToLoad.Add("givenName");
        search.PropertiesToLoad.Add("sn");
        search.PropertiesToLoad.Add("displayName");
        search.PropertiesToLoad.Add("userPrincipalName");            
        search.PropertiesToLoad.Add("cn");

        SearchResult result = search.FindOne();

        return new ADUser(result);
    }

И это работало нормально из консольного приложения. Тем не менее, когда я переместил его в приложение ASP.NET, я получил сообщение об ошибке об отсутствии правильного домена.

Есть ли хитрость, которой мне не хватает для доступа к AD при работе с учетной записью ASPNET?

РЕДАКТИРОВАТЬ : Передача только строки подключения домена LDAP: // недостаточно, так как для этого требуется фактический логин / пароль. Поскольку это выполняется на локальной учетной записи на компьютере, я не уверен, какой AD L / P использовать. Могу ли я как-то делегировать доступ к учетной записи пользователя?

РЕДАКТИРОВАТЬ # 2 : При попытке использовать олицетворение личности я получаю исключение DirectoryServicesCOME с:

Механизм аутентификации неизвестен.

Ответы [ 5 ]

1 голос
/ 27 июня 2011

Вы также можете попробовать включить домен в логин

adSharepointUsers = new DirectoryEntry("LDAP://MyDomain","MyDomain/ADUser","password");
1 голос
/ 08 декабря 2008

Самый простой способ обойти это - запустить пул веб-приложений в качестве учетной записи домена, которая имеет требуемый доступ. Это избавляет от необходимости управлять безопасным хранением пароля. Не забудьте сделать учетную запись членом локальной группы IIS_WPG. Если вы решите использовать олицетворение, вам придется настроить делегирование Kerberos, а также изменить конфигурацию ASP.NET для олицетворения. Это будет включать запуск пула приложений в качестве учетной записи домена, предоставление этой учетной записи разрешения на делегирование учетных данных (вкладка делегирования свойств учетной записи в MMC пользователей AD и компьютеров AD). Затем убедитесь, что веб-сайт настроен на использование negoiate в метабазе (это значение по умолчанию в IIS6, но не уверен в других версиях), и зарегистрируйте имя участника-службы для новой учетной записи домена.

Редактировать: ошибка «Неизвестная аутентификация» звучит как неправильно сконфигурированное делегирование. Убедитесь, что учетная запись, под которой работает пул приложений, является доверенной для делегирования, что IIS настроен на использование ТОЛЬКО проверки подлинности Windows и что для учетной записи удостоверения пула приложений зарегистрирован действительный SPN.

1 голос
/ 08 декабря 2008

В качестве альтернативы вы можете указать идентификатор impersonate = true в файле web.config, и запрос в Active Directory будет отправлен как вызывающий пользователь вместо Machine \ ASPNET

Редактировать: Если вы получаете ошибку аутентификации, смотрите сообщение PIPTHEGEEK, вам нужно будет доверять свой веб-сервер для делегирования, однако будьте осторожны с доверием для делегирования (так как это открывает еще одну червь для типов безопасности). Вы должны разрешить веб-серверу передавать учетные данные текущего пользователя в AD.

Если возможно, перейдите в свойства AD для компьютера, выберите вкладку делегирования и выберите «Доверять этот компьютер для делегирования любой службе (только Kerberos)

Посмотри, работает ли это. Если это так, вы можете дополнительно детализировать разрешения, используя третий параметр, который гласит

"Доверять этому компьютеру только делегирование указанным службам"

Затем выберите «Использовать только Kerberos»

и в «службах, которым эта учетная запись может предоставлять делегированные учетные данные», добавьте соответствующую информацию службы.

1 голос
/ 08 декабря 2008

Если это приложение для внутренней сети, использующее проверку подлинности Windows, то вы можете поместить вызов AD в контекст олицетворения пользователя.

Что-то вроде:

using (((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate())
{
    // Do your AD stuff here
}
1 голос
/ 08 декабря 2008

Да. Вы должны дать ему строку подключения к каталогу. Консольное приложение (работающее как вы) работает с вашими учетными данными, включая доступ к каталогу. Приложение ASP.NET запускается с учетными данными пользователя ASPNET, которые являются локальными для системы, в которой выполняется приложение, а не для глобального каталога.

...