É 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