2013-03-11 3 views
1

Я пытаюсь создать веб-сайт интрасети, который может искать адрес электронной почты пользователей на основе имени пользователя Active Directory.Как настроить веб-сайт ASP.Net для доступа к Active Directory

У меня есть следующие в моем web.config:

<authentication mode="Windows"/> 
<identity impersonate="true"/> 

И можно получить пользователи UserName с:

Environment.UserName 

Запуск на локальном хосте, следующий код позволяет мне для запроса AD и получить электронное письмо:

public string GetADUser(string userName) 
{    
    DirectoryEntry entry = new DirectoryEntry(); 

    // get a DirectorySearcher object 
    DirectorySearcher search = new DirectorySearcher(entry); 

    // specify the search filter 
    search.Filter = "(&(objectClass=user)(anr=" + userName + "))"; 

    // specify which property values to return in the search 
    search.PropertiesToLoad.Add("mail"); // smtp mail address 

    // perform the search 
    SearchResult result = search.FindOne(); 

    string email = string.Empty; 

    if (result != null) 
    { 
     if (result.Properties["mail"].Count == 1) 
     { 
      email = result.Properties["mail"][0].ToString(); 
     } 
     else 
     { 
      email = "no email"; 
     } 
    } 
    else 
    { 
     email = "not found"; 
    } 

    return email; 
} 

Отлично, этот код проходит аутентификацию, используя мои учетные данные d efault и позволяет мне ввести имя пользователя и найти адрес электронной почты пользователей.

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

[COMException (0x80072020): An operations error occurred.] 

В результате поиска в Google обнаружена проблема с разрешениями.

Чтобы обойти это, я попытался установить идентификатор пула приложений на мои учетные данные, но это все еще не позволяет коду выполнять поиск в AD.

аутентификации веб-сайт настроен в IIS следующим образом (активированные элементы помечены < <):

Anonymous Authentication:Disabled 
ASP.NET Impersonation:Enabled << 
Basic Authentication:Disabled 
Digest Authentication:Disabled 
Forms Authentication:Disabled 
Windows Authentication:Enabled << 

Возможно ли это делать то, что я пытаюсь сделать? Что мне не хватает?

+1

Возможно, вам это будет полезно: http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C – 5arx

+0

Спасибо, я прочитаю и посмотрю, если это помогает. – philreed

+0

Много информации по ссылке, спасибо. Я буду хранить эти закладки для дальнейшего использования. У него не было прямого решения проблемы, с которой я столкнулся, но это определенно дало мне лучшее понимание AD. – philreed

ответ

2

OK Я нашел проблему.

В этом случае, имея ASP.NET Impersonation:Enabled в IIS и моем Web.Config, конфликтует с идентификатором пула приложений, который я настроил. (Я думаю).

После того, как я установил идентификатор пула приложений для запуска с использованием соответствующей учетной записи, прошедшей проверку подлинности для запроса AD, отключил олицетворение и оставил Windows Authentication:Enabled. Я смог получить веб-сайт для запроса AD без передачи каких-либо учетных данных в моем коде.

Смежные вопросы