Quantcast
Channel: Moisés Rivas » Desarrollo WEB
Viewing all articles
Browse latest Browse all 10

Inicio de Sesión con otra Aplicación

$
0
0

Hola gente, hoy quería hablar sobre un tema que busque mucho en internet y no encontré, se trata de iniciar sesión desde mi aplicación pero con otra aplicación.

Actualización:

ESTE EJEMPLO ES PARA APLICACIONES QUE SE ENCUENTRAN DENTRO DE UN MISMO DOMINIO, DONDE TODAS LAS APP QUE SE CREAN ESTARÁN COLGADAS BAJO ESTE DOMINIO.

Imaginen esto, una empresa tiene una aplicación web que se loguean todos los empleados, pero al empezar a crecer esta empresa, empieza a tener otras aplicaciones donde trabajan los mismos empleados, son distintas funcionalidades para las cuales se emplean estas aplicaciones, donde son los mismos empleados y es como engorroso tener que hacer un administrador de usuarios para cada app, cuando solo necesitas saber si es de la empresa y darle permisos,  bueno el requerimiento es el siguiente:

Hacer una aplicación de inicio de sesión único para todas las aplicaciones que estén o que se realicen a futuro.

Para este ejemplo vamos a realizar lo siguiente, tendremos 3 aplicaciones.

Donde App1 es la de logueo y las otras dos App2 y App3 son aplicaciones simples

1. En nuestra App1 en la página de loguin en el botón de inicio le creamos un método para cuando haga clic o en su defecto si es MVC en el Controlador que inicia sesión.

protected void LoginButton_Click(object sender, EventArgs e)
{
  if (Membership.ValidateUser(LoginUser.UserName, LoginUser.Password))
  {
    FormsAuthentication.SetAuthCookie(LoginUser.UserName, true);
    FormsAuthentication.RedirectToLoginPage();
  }
}

2. En el web.config de la App1 agregamos el name a la validación, de la siguinte forma

<authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" name="appDeLogueo" timeout="2880" />
    </authentication>

en esta parte es importante remarcar que se le agrego el tag name.

3. Ahora nos vamos a nuestras App2 y App3 que aquí he elegido usar MVC 2 y MVC 3, nos vamos al web.config y ponemos lo siguiente

<authentication mode="Forms">
   <forms loginUrl="http://localhost:8568/Account/Login.aspx"
          name="appDeLogueo"
          timeout="2880" />
 </authentication>
 <authorization>
    <deny users="?"/>
 </authorization>

4. Ahora nos vamos al archivo global.asax y agregamos el siguiente metodo

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
 {
     var cookieName = FormsAuthentication.FormsCookieName;
     var authCookie = Context.Request.Cookies[cookieName];
     if (null == authCookie)
     {
        Response.Redirect("http://localhost:8568/Account/Login.aspx?ReturnUrl=" + Request.Url.AbsoluteUri);
     }
 }

Si miran bien van a notar que he puesto un Redirect forzado donde más allá que lo indique en el web.config la directiva de logueo, acá lo que hago es agregarle el QueryString de ReturnUrl pero con el path completo, porque sino lo que sucede es que re direcciona pero el solamente al hash y al retornar termina buscando el retorno a ese hash dentro de su propio dominio.

Bien ahora ya podemos ejecutar nuestras aplicaciones y veremos que nos re direcciona a la pagina de loguin y una vez que hacemos loguin nos comparte las credenciales para luego volver a la pagina que pidio el inicio de sesión sin importar el dominio.

image

Un dato interesante es si tildamos el check de recordar usuario cuando iniciamos sesión después abrimos las otras web y estas directamente ya no van a la pagina de inicio  solamente saben que ya alguien se logueo y buscar los datos a partir de la cokie que pasamos en el web.config entonces trae las credenciales sin intervención de nada más.

Bueno de ante mano pido disculpas si he indicado algo erróneo, la verdad que no soy un experto en seguridad de aplicaciones, pero me pareció interesante demostrar como podemos hacer una simple aplicación de inicio de sesión para que otras web solo utilicen el logueo contra esta y así tener las mínimas credenciales, la verdad que esto nos llevo un buen rato descubrir como hacerlo con mi compañero Aldo pero al fin dimos con la tecla.

Hay mucho más como STS para realizar cosas más sofisticadas como autenticar contra distintos sistemas como Google, Windows Live ID, Servicios Azure etc,, para ver ejemplos en video pueden visitar el canal de Youtube de la Comunidad de Technet y MSDN de Microsoft http://www.youtube.com/user/technetymsdn, ahí tambien van a encontrar un montón de videos de los eventos que realiza Microsoft como el Run Web Camp que se realizo en Buenos Aires.

Desde ya gracias por pasar por aquí y cualquier duda me mandan un menaje a mi mail que es moises.rivas@msptechrep.com chau y nos vemos en la próxima.


Archivado en: Desarrollo WEB, Utilidades

Viewing all articles
Browse latest Browse all 10

Latest Images





Latest Images