Pergunta

Eu tenho uma aplicação web que está correndo contra autenticação do Windows usando o nosso Active Directory. Eu tenho um novo requisito para puxar algumas informações pessoais através da entrada do Active Directory. Qual seria a maneira mais fácil de ter acesso a esta informação?

Foi útil?

Solução

Acessando o usuário diretamente através de um DirectoryEntry parece ser a abordagem mais direta. Aqui estão algumas dicas relacionadas com a AD que aprendi com meu primeiro projeto AD-related:

  • Em um URI, LDAP escrita em letras minúsculas. Caso contrário, você vai ter um erro de mistério. Passei mais de um dia sobre esta questão deprimente ...
  • Para limpar uma propriedade de valor único, configurá-lo para uma cadeia vazia, não nulo. Null causa uma exceção.
  • Para limpar uma propriedade com vários valores, use o DirectoryEntry.Property.Clear () método.
  • A referência Ativo esquema do diretório vai dizer que tipo de dados um valor será e se é multi-valor ou de valor único.
  • Você não precisa manualmente RefreshCache () em um DirectoryEntry mas se você usá-lo e especificar quais propriedades para cache, sabe que ele não vai auto-recuperar quaisquer outras propriedades no futuro.
  • A COMException pode ser jogado em absolutamente qualquer momento você usar as classes no System.DirectoryServices. Fique de olho nesses blocos try. Não assuma nada é seguro.

Você provavelmente vai precisar usar DirectorySearcher para obter entrada de diretório do seu usuário, se você não sabe o seu caminho (que você não, apenas por tê-lo logado). Usando era relativamente fácil, mas cuidado com as peculiaridades na sintaxe LDAP; ou seja, tendo para codificar não ASCII (e outros?) caracteres. A seqüência de pesquisa que você usaria provavelmente seria algo como: (& (sAMAccountName = whatever) (class = user)) . Esta é em cima da minha cabeça e pode ser um pouco incorreto.

O Ativo referência esquema do diretório será útil. Entendo que o esquema pode ser modificado e ampliado (por exemplo, instalar o Exchange irá adicionar informações caixa de correio para usuários).

AD Explorador é uma ferramenta útil que você pode usar para depuração e gestão de dados AD baixo nível. Eu achei que seria útil quando eu sei que a propriedade Quero set, mas não consegue encontrar a caixa de diálogo direito na ferramenta de gerenciamento AD.

Outras dicas

Você pode achar o seguinte trecho útil como titular.

public static bool IsUserInGroup(string lanid, string group)
{
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + LDAPPATH);
    if(entry != null)
    {
        entry.Username=@"LDAPUSER";
        entry.Password="LDAPPASSWORD";
        DirectorySearcher srch = new DirectorySearcher(entry);
        srch.Filter = String.Format("(&(objectClass=person)(sAMAccountName={0}))", lanid);
        srch.PropertiesToLoad.Add("memberOf");

        SearchResult result = srch.FindOne();
        if(result != null)
        {
            if(result.Properties.Contains("memberOf"))
            {
                string lookfor = String.Format("cn={0},", group.ToLower());
                foreach(string memberOf in result.Properties["memberOf"])
                {
                    if(memberOf.ToLower().StartsWith(lookfor))
                        return true;
                }
            }
        }
        return false;
    }
    throw new Exception(String.Format("Could not get Directory lanid:{0}, group{1}",   lanid, group));
}

Tenha um olhar para o espaço de nomes System.DirectoryServices:

System.DirectoryServices Namespace

Eu usei uma biblioteca LDAP padrão para recuperar informações de um servidor Active Directory, mas você teria que verificar se os dados que você precisa está disponível através do esquema do servidor LDAP. Em geral, você pode obter qualquer informação armazenada em InetOrganizationalPerson e na maioria das informações relacionadas ao grupo (s) a que pertencem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top