Autenticacion AD con C#

04/10/2006 - 09:53 por Miguel Tubia | Informe spam
Buenos días,

estamos realizando una aplicación que ha de validar usuarios contra el
AD. La idea es, sobre Winforms, mostrar un formulario donde el usuario
pueda meter el login y el password, que deberán ser los mismos que
usaría normalmente para iniciar sesión en Windows (configurados en el
Active Directory) y esto comprobarlo si es correcto. He buscado por
google pero muchas opciones para realizar búsquedas en el AD para ver si
existe el usuario. Pero eso creo que no nos sirve, porque solo comprueba
el nombre, no el password. Solo necesitamos conectar y comprobar que es
válido... ¿Alguna idea?
Ya puesto... una vez comprobado, el usuario del programa puede ser
distinto del logado en el ordenador en ese momento... ¿Cómo se podría
hacer para impersonalizarlo? ¿Cómo se puede crear el contexto de ese
usuario? (espero que la pregunta esté bien realizada).

Muchas gracias por la ayuda

Un saludo

Miguel

Preguntas similare

Leer las respuestas

#1 floyd303
04/10/2006 - 15:45 | Informe spam
Hola!

Has probado a utilizar el bloque de aplicacion: Membership?
http://msdn2.microsoft.com/en-us/li...rship.aspx
Si utilizas el proveedor ActiveDirectoryMembershipProvider :
http://msdn2.microsoft.com/en-us/li...vider.aspx
tienes lo necesario para validar usuarios contra el AD.

Si luego, la aplicacion es en ASP.NET puedes utilizar una serie de
controles predefinidos que se acoplan al Membership y te facilitan el
mantenimiento de las cuentas de usuario.

Espero que esto te ayude
Saludos
Roberto M. Oliva



Miguel Tubia ha escrito:

Buenos días,

estamos realizando una aplicación que ha de validar usuarios contra el
AD. La idea es, sobre Winforms, mostrar un formulario donde el usuario
pueda meter el login y el password, que deberán ser los mismos que
usaría normalmente para iniciar sesión en Windows (configurados en el
Active Directory) y esto comprobarlo si es correcto. He buscado por
google pero muchas opciones para realizar búsquedas en el AD para ver si
existe el usuario. Pero eso creo que no nos sirve, porque solo comprueba
el nombre, no el password. Solo necesitamos conectar y comprobar que es
válido... ¿Alguna idea?
Ya puesto... una vez comprobado, el usuario del programa puede ser
distinto del logado en el ordenador en ese momento... ¿Cómo se podría
hacer para impersonalizarlo? ¿Cómo se puede crear el contexto de ese
usuario? (espero que la pregunta esté bien realizada).

Muchas gracias por la ayuda

Un saludo

Miguel
Respuesta Responder a este mensaje
#2 Misael Monterroca
04/10/2006 - 17:32 | Informe spam
COn este código puedes realizar la validación de usuario y password con AD,

La parte más importantes es :
cnnLdap.Bind(new System.Net.NetworkCredential(usuario,
contraseña));

si puede hacer el bind es que el usuario y contraseña son correctos, si da
un LDAP excepcion, y si el errocode es 49, significa que hay el password es
incorrecto, los demás son errores "generales"



string rutaLdap = Configuracion.Obtener("ADString");

try
{
LdapConnection cnnLdap = new LdapConnection(new
LdapDirectoryIdentifier(rutaLdap));
if(usuario.Contains("\\"))
{
string[] newUser = usuario.Split(new Char[] {'\\'});
usuario = newUser[1];
}
cnnLdap.Bind(new System.Net.NetworkCredential(usuario,
contraseña));
resultado = true;
}
catch(LdapException lEx)
{
//Son credenciales invalidas.
if (lEx.ErrorCode == 49)
{
return false;
}
throw;
}
catch (Exception ex)
{
throw;
}
finally
{
cnnLdap.Dispose();
}
{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Miguel Tubia" <"migueltubia at gmail dot com"> wrote in message
news:%
Buenos días,

estamos realizando una aplicación que ha de validar usuarios contra el AD.
La idea es, sobre Winforms, mostrar un formulario donde el usuario pueda
meter el login y el password, que deberán ser los mismos que usaría
normalmente para iniciar sesión en Windows (configurados en el Active
Directory) y esto comprobarlo si es correcto. He buscado por google pero
muchas opciones para realizar búsquedas en el AD para ver si existe el
usuario. Pero eso creo que no nos sirve, porque solo comprueba el nombre,
no el password. Solo necesitamos conectar y comprobar que es válido...
¿Alguna idea?
Ya puesto... una vez comprobado, el usuario del programa puede ser
distinto del logado en el ordenador en ese momento... ¿Cómo se podría
hacer para impersonalizarlo? ¿Cómo se puede crear el contexto de ese
usuario? (espero que la pregunta esté bien realizada).

Muchas gracias por la ayuda

Un saludo

Miguel
Respuesta Responder a este mensaje
#3 Miguel Tubia
05/10/2006 - 09:36 | Informe spam
Hola,
gracias por responder. También he intentado hacerlo con UserLogon. Pongo
aquí la solución que usé por si le es útil a alguien:


private const int LOGON32_LOGON_NETWORK = 3;
private const int LOGON32_PROVIDER_DEFAULT = 0;
private const int FORMAT_MESSAGE_FROM_SYSTEM = 0X00001000;
private const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 3;

[DllImport("advapi32.dll")]
static extern bool LogonUser(String UserName, String Domain, String
Password, int LogonType, int LogonProvider, out IntPtr WindowToken);


public bool Login(string _dominio)
{
IntPtr windowToken=IntPtr.Zero;
bool _logonRetVal = LogonUser(nombre, _dominio, password,
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, out windowToken);
return _logonRetVal;
}

Probaré con las alternativas que me dais.
Muchas gracias

Un saludo


Misael Monterroca escribió:
COn este código puedes realizar la validación de usuario y password con AD,

La parte más importantes es :
cnnLdap.Bind(new System.Net.NetworkCredential(usuario,
contraseña));

si puede hacer el bind es que el usuario y contraseña son correctos, si
da un LDAP excepcion, y si el errocode es 49, significa que hay el
password es incorrecto, los demás son errores "generales"



string rutaLdap = Configuracion.Obtener("ADString");

try
{
LdapConnection cnnLdap = new LdapConnection(new
LdapDirectoryIdentifier(rutaLdap));
if(usuario.Contains("\\"))
{
string[] newUser = usuario.Split(new Char[] {'\\'});
usuario = newUser[1];
}
cnnLdap.Bind(new System.Net.NetworkCredential(usuario,
contraseña));
resultado = true;
}
catch(LdapException lEx)
{
//Son credenciales invalidas.
if (lEx.ErrorCode == 49)
{
return false;
}
throw;
}
catch (Exception ex)
{
throw;
}
finally
{
cnnLdap.Dispose();
}
{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Miguel Tubia" <"migueltubia at gmail dot com"> wrote in message
news:%
Buenos días,

estamos realizando una aplicación que ha de validar usuarios contra el
AD. La idea es, sobre Winforms, mostrar un formulario donde el usuario
pueda meter el login y el password, que deberán ser los mismos que
usaría normalmente para iniciar sesión en Windows (configurados en el
Active Directory) y esto comprobarlo si es correcto. He buscado por
google pero muchas opciones para realizar búsquedas en el AD para ver
si existe el usuario. Pero eso creo que no nos sirve, porque solo
comprueba el nombre, no el password. Solo necesitamos conectar y
comprobar que es válido... ¿Alguna idea?
Ya puesto... una vez comprobado, el usuario del programa puede ser
distinto del logado en el ordenador en ese momento... ¿Cómo se podría
hacer para impersonalizarlo? ¿Cómo se puede crear el contexto de ese
usuario? (espero que la pregunta esté bien realizada).

Muchas gracias por la ayuda

Un saludo

Miguel



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida