Conexao AD com Asp.Net C

03/04/2013

0

Pessoal,
boa tarde!
Estou precisando fazer uma interação entre meu webform com AD, ou seja uma tela de login que autentica no active directory para validar os usuários. Já fiz algumas pesquisas e encontrei alguns materiais mas ainda assim to um pouco perdido por ser iniciante nessa tecnologia.
Eu preciso que quando o usuário entrar com as credenciais (Login e Senha) ao clicar em logar seja feita uma analista se esta ok e uma condicional que se ele pertencer ao grupo gerente, ele seja direcionado para a pagina gerente.aspx e se for usuário comum usuario.aspx... alem disso preciso que fique em sessão alguns dados vindos do AD para utilizar em consultas ao BD.

Suponhamos que o Gerente de TI logou na aplicação foi validado e direcionado para a pagina gerenteTI.aspx, com isso ele precisa fazer a pesquisa em Banco sobre informações dos seus subordinados.

O comando abaixo valida o usuário no AD porem eu gostaria de direcionar e guarda alguns campos em variáveis ou sessões para utilizar posteriormente.
using System;

using System.Collections.Generic;

using System.Text;

using System.Data.SqlClient;

using System.Data;

using System.DirectoryServices;

 

namespace ActiveDirectory

{

    public class AuthoAD

    {

        public string Autentica(string IpServer, string User, string Senha)

        {

            string retorno = string.Empty;

            try

            {

                DirectoryEntry objAD = new DirectoryEntry("LDAP://" + IpServer, User, Senha);

                retorno = objAD.Name;

            }

            catch (Exception ex)

            {

                throw new Exception(ex.Message);

            }

            return retorno;

        }

    }

}



using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using ActiveDirectory;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

    protected void btLogar_Click(object sender, EventArgs e)

    {

        AuthoAD objAD = new AuthoAD();

 

        try

        {

            Response.Write(objAD.Autentica("anuket", txtUser.Text, txtSenha.Text) + "<br>");

        }

        catch (Exception ex)

        {

            Response.Write(ex.Message);

        }

    }

}



Esse código foi tirado do próprio site Devmedia.
Carlos Arruda

Carlos Arruda

Responder

Posts

03/04/2013

Valter Furtado

eu fiz esse método que faz login de acordo com os dados do AD... mas é Desktop
private bool validarUsuario(String strLogin, String strSenha)
        {
            bool valid = false;
            try
            {
                DirectoryEntry ad = new DirectoryEntry(FWEtiquetaZebra.Data_Object.DaoConexao.strDominioApp, strLogin, strSenha);
                if (ad.NativeObject != null)
                {
                    System.DirectoryServices.DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher(ad);
                    mySearcher.PropertiesToLoad.Add("sAMAccountName");
                    mySearcher.PropertiesToLoad.Add("name");
                    mySearcher.PropertiesToLoad.Add("cn");
                    mySearcher.PropertiesToLoad.Add("objectClass");
                    mySearcher.PropertiesToLoad.Add("mail");
                    mySearcher.PropertiesToLoad.Add("department");
                    mySearcher.PropertiesToLoad.Add("company");

                    mySearcher.Filter = ("(sAMAccountName= " + strLogin + ")");
                    
                    foreach (System.DirectoryServices.SearchResult result in mySearcher.FindAll())
                    {
                        //LoginInformacoes.StrNome = result.GetDirectoryEntry().InvokeGet("cn") as string;
                        LoginInformacoes.LoginUsuario = result.GetDirectoryEntry().InvokeGet("sAMAccountName") as string;
                        //LoginInformacoes.StrEmail = result.GetDirectoryEntry().InvokeGet("mail") as string;
                        //LoginInformacoes.StrSetor = result.GetDirectoryEntry().InvokeGet("department") as string;
                    }

                    LoginInformacoes.Carregar();
                    valid = true;
                }
            }
            catch (Exception ex)
            {
                valid = false;
            }
            return valid;
        }
Responder

03/04/2013

Carlos Arruda

Entendi... onde você chama esse metodo? Tipo voce o chama ao click de um botao?
Onde voce direciona o usuario para a pagina que ele pode acessar, esse ai faz a validação nao é?
Vc guarda as info vindas do AD em sessao para ser utilizada posteriormente?

Esse codigo que postei tambem faz a validaçao e retorna falso ou verdadeiro... gostaria alem disso ele direcionar para a pagina correta e guarda em sessao ou variavel as info vindas do AD.
Responder

03/04/2013

Valter Furtado

se o seu já valida, é menos mal...
a principio esse código q postei é pra desktop, uma ação do botão de login chama este método...

o que faria se fosse você era vincular os cargos que você tem no AD com uma tabela no banco de dados onde determinado cargo vai redirecionar para determinada página... ou deixa estático na própria página.

Daí vc pode fazer um CASE, por exemplo:
            string strDestino = "~/";
            switch (VariavelDoCARGO)
            {
                case "Gerente de TI":
                    strDestino += "gerenteTI.aspx";
                case "Gerente de Compras":
                    strDestino += "gerenteCompras.aspx";
                default:
                    strDestino += "PaginaPadrao.aspx";
            }
            Response.Redirect(strDestino);


mas você coloca isso depois que validar no AD e retornar o CARGO.
Responder

04/04/2013

Carlos Arruda

Entendi, mas nesse caso de utilizar o BD ele teria que ser constantimente atualizado, pois podem entrar eou sair funcionários, mudança de função e departamento. Ai ficaria uma coisa manual né?
Responder

04/04/2013

Valter Furtado

alguma coisa manual vc vai ter que ter rs... se bem que, acho que no AD tem uma propriedade no usuario que é website, se cargo tiver algo do tipo talvez você consiga utilizar com a finalidade da página de redirecionamento e assim não precisaria de algo 'manual'
Responder

04/04/2013

Carlos Arruda

Entendi.
Obrigado! Vou analisar...
Responder

21/08/2013

José

Como aparentemente o problema foi solucionado, estou dando o tópico por concluído.
Caso contrario sinalize que reabro ou tópico ou fique a vontade para criar um novo tópico.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar