É possível recuperar dados do Active Directory representando um usuário autenticado do Windows no ASP.NET

Eu estive tentando resolver esse problema o dia todo e li algumas informações conflitantes nas respostas padrão do quadro de mensagens do Google.

O que estou tentando fazer é recuperar o endereço de email de um usuário do domínio (ou seja, o usuário atualmente conectado) do diretório ativo. Meu site do ASP.NET 4 está configurado para autenticação do Windows e tudo funciona bem até que o diretório ativo seja chamad

Quando faço o seguinte, recebo uma COMException na linha search.findAll (). A mensagem de exceção é "Ocorreu um erro de operação" (Mensagem muito útil, não é?) (Código simplificado para facilitar a leitura)

WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext wic = null;

wic = winId.Impersonate();
using (DirectoryEntry root = new DirectoryEntry(rootQuery))
{
      String userQuery = GetUserQuery();
      DirectorySearcher searcher = new DirectorySearcher(root);
      searcher.SearchScope = SearchScope.Subtree;
      searcher.Filter = userQuery;

      SearchResultCollection results = searcher.FindAll();
      return (results[0].Properties["proxyaddresses"][0]).ToString();
}

Então, basicamente, eu quero representar o usuário conectado para fazer a chamada. Observe que esse código funciona como esperado se eu passar minhas credenciais diretamente para o construtor DirectoryEntry. Além disso, recebo o mesmo erro se me livrar do código de representação e definir a representação ampla do aplicativo na configuração da Web.

Então eu acho que a minha pergunta, antes de perder mais tempo com isso, isso é possível? Ou vocête para especificar um nome de usuário e senha para acessar o AD?

BTT na minha caixa de desenvolvimento, estou executando o IIS5, mas provavelmente implantarei no IIS

editar

como pedido

rootQuery = @"LDAP://{0}.com/DC={0}, DC=com";
userQuery = @"(&(samAccountName={0})(objectCategory=person)(objectClass=user))";

com o domínio e o usuário adequados especificado

questionAnswers(5)

yourAnswerToTheQuestion