Array
(
)

Conexao AD com Asp.Net C

Carlos Arruda
   - 03 abr 2013

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.
#Código

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.

Valter Furtado
   - 03 abr 2013

eu fiz esse método que faz login de acordo com os dados do AD... mas é Desktop
#Código

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;
        }

0
|
0

Carlos Arruda
   - 03 abr 2013

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.

0
|
0

Valter Furtado
   - 03 abr 2013

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:
#Código

            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.

0
|
0

Carlos Arruda
   - 04 abr 2013

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é?

0
|
0

Valter Furtado
   - 04 abr 2013

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'

0
|
0

Carlos Arruda
   - 04 abr 2013

Entendi.
Obrigado! Vou analisar...

0
|
0

José
   - 21 ago 2013

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.

0
|
0