none
verificar se o Nome existe no active directory RRS feed

  • Pergunta

  • boa tarde pessoal,

    quero verificar se um nome esta no active directory. como posso fazer?


    meu cenario é o seguinte:
    tenho uma aplicação web que fiz no visual studio 2010 com base de dados SQL Server, e permito a autenticação na minha aplicação atraves do active directory.


    tenho uma tabela onde vou inserir alguns utilizadores e as suas permissoes. mais quero que antes que seja inserido um utilizador, para o sistema verificar se o utilizador inserido existe ou não no active directory.


    a minha grande duvida é como verificar se o user existe no active directory.
    quinta-feira, 16 de fevereiro de 2012 18:23

Respostas

  • Boa tarde.

    Segue rotina:

    public class Informacoes
        {
            public string Displayname { get; set; }
            public string Telephonenumber { get; set; }
            public string Mail { get; set; }
            public string Title { get; set; }
            public string Department { get; set; }
            public string Physicaldeliveryofficename { get; set; }
            public string Info { get; set; }
            public string Login { get; set; }
        }

    public Informacoes RetornaDadosUsuario(string identify)
            {           
    
                List<Informacoes> listaDeIformacoes = new List<Informacoes>();            
                Informacoes objInformacoes = new Informacoes();
    
                string[] domainUser = identify.Split("\\".ToCharArray());
                string domain = domainUser[0];
                string userName = domainUser[1];                        
    
                try
                {                
    
                    //inicio AD
                    DirectoryEntry adRoot = new DirectoryEntry();
                    DirectorySearcher directorySearcher = new DirectorySearcher(adRoot);
    
                    directorySearcher.Filter = String.Format("(&(objectCategory=Person)(objectClass=User)(samaccountname={0}*))", userName);
    
                    SearchResult result = directorySearcher.FindOne();
    
                    if (result == null)
                    {
                        // Erro, não encontrado
                        //errologin.Visible = true;
                    }
                    else
                    {
                        DirectoryEntry de = result.GetDirectoryEntry();
    
                        objInformacoes.Login = userName;
                        objInformacoes.Displayname = getActiveDirectoryProperty(de, "displayname").ToString();
                        objInformacoes.Telephonenumber = getActiveDirectoryProperty(de, "telephonenumber").ToString();
                        objInformacoes.Mail = getActiveDirectoryProperty(de, "mail").ToString();
                        objInformacoes.Title = getActiveDirectoryProperty(de, "title").ToString();
                        objInformacoes.Department = getActiveDirectoryProperty(de, "department").ToString();
                        objInformacoes.Physicaldeliveryofficename = getActiveDirectoryProperty(de, "physicaldeliveryofficename").ToString();
                        objInformacoes.Info = getActiveDirectoryProperty(de, "info").ToString();
    
                        listaDeIformacoes.Add(objInformacoes);
                    }
                    //final AD
                    return objInformacoes;
                }
                catch (Exception ex)
                {
                    return null;
                    throw;
                }
            }


    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.

    • Marcado como Resposta desabi sexta-feira, 17 de fevereiro de 2012 12:42
    quinta-feira, 16 de fevereiro de 2012 19:10
  • obrigado pessoal, consegi fazer dessa forma

    // função que verifica se um user existe no active directory
            protected int Verifica_Existe_AD(string nome)
            {
                int verifica = 0;
                string identify_user = "MEUDOMINIO\\" + nome + "";

                string[] domainUser = identify_user.Split("\\".ToCharArray());
                string domain = domainUser[0];
                string userName = domainUser[1];

                try
                {
                    //inicio AD
                    DirectoryEntry adRoot = new DirectoryEntry();
                    DirectorySearcher directorySearcher = new DirectorySearcher(adRoot);

                    directorySearcher.Filter = String.Format("(&(objectCategory=Person)(objectClass=User)(samaccountname={0}*))", userName);
                    SearchResult result = directorySearcher.FindOne();

                    if (result == null)
                        verifica = 0;

                    else
                        verifica = 1;


                }
                catch (Exception ex)
                {
                }
                return verifica;
            }

    • Marcado como Resposta desabi sexta-feira, 17 de fevereiro de 2012 12:42
    sexta-feira, 17 de fevereiro de 2012 12:42

Todas as Respostas

  • Boa tarde.

    Segue rotina:

    public class Informacoes
        {
            public string Displayname { get; set; }
            public string Telephonenumber { get; set; }
            public string Mail { get; set; }
            public string Title { get; set; }
            public string Department { get; set; }
            public string Physicaldeliveryofficename { get; set; }
            public string Info { get; set; }
            public string Login { get; set; }
        }

    public Informacoes RetornaDadosUsuario(string identify)
            {           
    
                List<Informacoes> listaDeIformacoes = new List<Informacoes>();            
                Informacoes objInformacoes = new Informacoes();
    
                string[] domainUser = identify.Split("\\".ToCharArray());
                string domain = domainUser[0];
                string userName = domainUser[1];                        
    
                try
                {                
    
                    //inicio AD
                    DirectoryEntry adRoot = new DirectoryEntry();
                    DirectorySearcher directorySearcher = new DirectorySearcher(adRoot);
    
                    directorySearcher.Filter = String.Format("(&(objectCategory=Person)(objectClass=User)(samaccountname={0}*))", userName);
    
                    SearchResult result = directorySearcher.FindOne();
    
                    if (result == null)
                    {
                        // Erro, não encontrado
                        //errologin.Visible = true;
                    }
                    else
                    {
                        DirectoryEntry de = result.GetDirectoryEntry();
    
                        objInformacoes.Login = userName;
                        objInformacoes.Displayname = getActiveDirectoryProperty(de, "displayname").ToString();
                        objInformacoes.Telephonenumber = getActiveDirectoryProperty(de, "telephonenumber").ToString();
                        objInformacoes.Mail = getActiveDirectoryProperty(de, "mail").ToString();
                        objInformacoes.Title = getActiveDirectoryProperty(de, "title").ToString();
                        objInformacoes.Department = getActiveDirectoryProperty(de, "department").ToString();
                        objInformacoes.Physicaldeliveryofficename = getActiveDirectoryProperty(de, "physicaldeliveryofficename").ToString();
                        objInformacoes.Info = getActiveDirectoryProperty(de, "info").ToString();
    
                        listaDeIformacoes.Add(objInformacoes);
                    }
                    //final AD
                    return objInformacoes;
                }
                catch (Exception ex)
                {
                    return null;
                    throw;
                }
            }


    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.

    • Marcado como Resposta desabi sexta-feira, 17 de fevereiro de 2012 12:42
    quinta-feira, 16 de fevereiro de 2012 19:10

  • DirectoryEntry

    DirectorySearcher

    SearchResult 

    pessoal tenho que criar essas class? porque estas palavras não são reconhecidas. se tenho que criar vão ficar vazias?

    sexta-feira, 17 de fevereiro de 2012 10:09
  • DirectoryEntry  DirectorySearcher  SearchResult 
    pessoal tenho que criar essas class? porque estas palavras não são reconhecidas. se tenho que criar vão ficar vazias?
    Não vc somente precisa adicionar a ref no seu projeto

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    sexta-feira, 17 de fevereiro de 2012 10:43
    Moderador
  • Adicione a referencia:

    using System.DirectoryServices;


    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.

    sexta-feira, 17 de fevereiro de 2012 11:23
  • using System.DirectoryServices;

    ao adicionar este biblioteca ele não reconhece.

    que referencia usar para aceitar este biblioteca.

    sexta-feira, 17 de fevereiro de 2012 11:58
  • Voce adicionou nas referencias do seu projeto?

    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.

    sexta-feira, 17 de fevereiro de 2012 12:02
  • encontrei...

    Se vc não adicionou a referencia a DLL que contém o namespace dentro do seu projeto, vc nao vai conseguir usar o namespace

    Clica no projeto => references => add references

    Ache "System.DirectoryServices"

    clica em ADD

    sexta-feira, 17 de fevereiro de 2012 12:02
  • obrigado pessoal, consegi fazer dessa forma

    // função que verifica se um user existe no active directory
            protected int Verifica_Existe_AD(string nome)
            {
                int verifica = 0;
                string identify_user = "MEUDOMINIO\\" + nome + "";

                string[] domainUser = identify_user.Split("\\".ToCharArray());
                string domain = domainUser[0];
                string userName = domainUser[1];

                try
                {
                    //inicio AD
                    DirectoryEntry adRoot = new DirectoryEntry();
                    DirectorySearcher directorySearcher = new DirectorySearcher(adRoot);

                    directorySearcher.Filter = String.Format("(&(objectCategory=Person)(objectClass=User)(samaccountname={0}*))", userName);
                    SearchResult result = directorySearcher.FindOne();

                    if (result == null)
                        verifica = 0;

                    else
                        verifica = 1;


                }
                catch (Exception ex)
                {
                }
                return verifica;
            }

    • Marcado como Resposta desabi sexta-feira, 17 de fevereiro de 2012 12:42
    sexta-feira, 17 de fevereiro de 2012 12:42