Hi there!!!, Esta es primera participación en este Blog y bueno aqui estoy trayendo a ustedes algo que sin duda les será de mucha utilidad,
les comento en que consiste:
- Hace poco me dijierón que deseaban una aplicacion Web en la cual de entrada, la persona que quisiera hacer
uso de ella no necesitara ingresar su UserName ni su Password en un Formulario; que cuando la persona
metierá la dirección URL en el Browser internamente validará que el nombre de usuario que esta dentro de la
maquina exista en Directorio Activo (Exacto, la maquina tiene que estar en Dominio para poder entrar utilizando
Internet Explorer, con FireFox y otros Browsers, siempre pide Usuario y Contraseña, y si este nombre de usuario no existe en el Directorio Activo los saca automaticamente la aplicación)
y luego buscar sus Capacidades para este Usuario en la aplicación Web que hemos desarrollado... ¿Suena fácil no?
En realidad lo seria si no fuera por que no existe mucha información al respecto en Internet, aqui les traigo la
solución, el código esta perfectamente explicado con comentarios:
Primero en el WebConfig pongan en el Tag de <authentication mode="Windows">, para que de esta forma puedan acceder solo de la manera explicada. Ahora vayan a su Global.asax al método de Session_Start
void Session_Start(object sender, EventArgs e)
{
try
{
String lUserTest = Environment.UserName; //Con esta instrucción se recupera el nombre de usuario que
//Tiene la maquina de la persona que se intenta logear en la
//página WEB.
if (lUserTest != null && lUserTest.ToString().Trim() != String.Empty)
{
Session["User"] = lUserTest;
FindCapabilities(lUserTest); //Buscamos en Directorio Activo si el usuario Existe, en caso de Existir
//nos traemos sus capacidades.
}
else
{
}
}
catch (Exception ex)
{
//Atrapamos la exepción y la metemos en un Log de Eventos del Sistema.
}
}
private void FindCapabilities(String lUserTest)
{
try
{
UnObjetoNegocio objValActiveDirec = new UnObjetoNegocio(),
int lIdUsuario = 0;
//Por default los ponemos nulos todas las variables de Sesión.
if (UnObjetoNegocio.VALIDA_AD_USER(lUserTest)) //Este Método debe ser llevado
//por seguridad a otra clase privada por seguridad más adelante pongo las
//el método para que vean como se busca sin contraseña. Este método regresa
//un boleano si el usuario existe en Directorio Activo.
{
lIdUsuario = UnObjetoNegocio.EncuentraIDUsuarioSSP(lUserTest); //Ahora que nos aseguramos que exite,
//buscamos el ID de usuario en nuestra aplicación.
if (lIdUsuario > 0)
{
//Ahora buscamos sus Llenamos variables de Session Indicando sus Capacidades.
}
}
}
catch (Exception ex)
{
//Metemos en Bitacora de Errores.
}
finally
{
}
}
void Session_End(object sender, EventArgs e)
{
// Código que se ejecuta cuando finaliza una sesión.
// Nota: El evento Session_End se desencadena sólo con el modo sessionstate
// se establece como InProc en el archivo Web.config. Si el modo de sesión se establece como StateServer
// o SQLServer, el evento no se genera.
//NOTA: Borramos todas la variables de Sesión que utilizamos para la administración de la Capacidades.
}
public bool (string sUserName)
{
try
{
DirectoryEntry entry = new DirectoryEntry(sLDAP, sDomainAndUsername, sPwd);
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(&(objectCategory=user)(objectClass=person))";
SearchResult results = search.FindOne();
if (results != null)
{
}
return true;
}
catch (Exception ex)
{
//Metemos en Bitacora de Errores.
return false;
}
}
// **************************** Esto debe estar Preferentemente en una Capa de Negocio, además van
// a necesitar esta referencia:
// using System.DirectoryServices;************
///
/// Obtiene los datos de un usuario valida que exista en directorio activo
///
///
public bool VALIDA_AD_USER(string username)
{
//Estos deben estar encriptados en el WebConfig. Y son reservados solamente para la aplicación
//con esto se va a buscar en AD.
string sLDAP = ConfigurationManager.AppSettings["LDAP"].ToString();
string sDomain = ConfigurationManager.AppSettings["Dominio"].ToString();
string sUsername = ConfigurationManager.AppSettings["Usuario"].ToString();
string sPwd = ConfigurationManager.AppSettings["Password"].ToString();
string sDomainAndUsername = sDomain + @"\" + sUsername;
string sResult = "";
try
{
DirectoryEntry entry = new DirectoryEntry(sLDAP, sDomainAndUsername, sPwd);
object obj = entry.NativeObject;
String lUserTest = Environment.UserName;
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(&(objectCategory=person)(sAMAccountName=" + username + "))";
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
if (null == result)//Con el simple hecho que no sea nulo es que ya encontro el usuario.
{
String sResult = "";
//Aqui no lo utilizo pero por si lo necesitan esto es:
sResult = results.Properties["cn"][0].ToString(); //Su puesto
sResult = results.Properties["mail"][0].ToString();//Su mail
sResult = results.Properties["name"][0].ToString();//Nombre completo.
return false; //No permitimos que vaya a buscar en la aplicación sus Capacidades
}
return true;//Autorización para buscar Capacidades.
}
catch (Exception ex)
{
//Metemos en la Bitacora de Errores de Sistema.
return false;//No permitimos que vaya a buscar en la aplicación sus Capacidades
}
}
Como siempre sucede, cuando algo ya se sabe, pues es muy fácil de otra forma
pues... ( jojo el Obvio y sus cuates).
Traido a ustedes por Omar Fermin Romero Tovar. Hasta pronto.
Buscar en el blog
Authentification Mode Windows con Active Directory
a la/s 12:44 a.m. 0 comentarios Etiquetas: Authentification Windows Active Directory C#.NET ASP.NET
Silverlight Mashup
Les recomiendo un nuevo portal denominado muunyal, emplea el concepto de Mashup sobre una plataforma completamente Silverlight 2.0, es un concepto interesante de integración de información mediante RSS y APIs de las principales redes sociales como Flickr, Facebook, twitter, etc. en un solo lugar denominado muunyal.
Analizando el Portal no cabe duda que es un startup... vemos que su idea es tener en un solo punto la información que comparten los ciudadanos de internet, quienes tienen la opción de configurar sus diferentes redes sociales y RSS para que sus seguidores puedan consultar la información y mantenerse actualizados de los diferentes cambios en toda la nube, ahora se encuentra en una versión Beta 1.o pero se ve muy prometedor.
En la parte tecnológica es bien interesante como utilizaron Silverlight para las funcionalidades de drag and drop, contacte a los desarrolladores y me comentan que trabajaron con servicios RES del framework 3.5 de .NET para la integración con Flickr, así como con Silverlight Streaming para reproducción de video dentro de un Widget.
Esta iniciativa de mashups es una tendencia, la colaboración y web 2.0 se ven fortalecidas con soluciones y conceptos de este tipo.
Existen fabricantes de software que han desarrollado algunos productos interesantes, tal es el caso de una empresa Mexicana llamada Jackbe que tiene una solución para Sharepoint.
Les comparto un video interesante para conocer más de mashups
Felices mezclas....
a la/s 9:06 p.m. 0 comentarios