Este post es parte de una serie de artículos complementarios a la VAN sobre Identity Providers.
Escenario
Hay veces que podemos querer que manejar el login y logout del usuario independientemente de la página que esté navegando, es decir que una misma página se comporta de una manera si el usuario está autenticado y de otra cuando no lo está, pero la página es la misma.
El ejemplo que vamos a ver es en una aplicación MVC, por lo que a continuación veremos las acciones de Login y Logout, pero fácilmente se podría adaptar a otros escenarios con asp.net.
Actions
public void Logout() { WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule; string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null)); WSFederationAuthenticationModule.FederatedSignOut(new Uri(signoutUrl), new Uri(authModule.Realm)); } public ActionResult Login() { WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule; var signinUrl = authModule.CreateSignInRequest("passive", authModule.Realm, false); return Redirect(signinUrl.RequestUrl); }
Breve explicación
Para hacer en forma explícita el login y logout tenemos que redireccionar a otro sitio web (con ciertos parámetros en la url), justamente al sitio de ADFS y una buena forma de determinar la url completa a la que redireccionar es usas los servicios que nos provee WIF para tal fin, estos servicios armarán la url según la configuración en la sección microsoft.IdentityModel.
Un detalle aquí es que debemos permitir el acceso a usuarios no autenticados a nuestro sitio, es decir, debemos modificar la configuración por defecto que crea Federation Utility respecto a:
<authorization> <allow users="*"/> </authorization>
De esta forma, el login y logout del sitio no queda atado a las páginas sino a la intención manifiesta del usuario.
No hay comentarios.:
Publicar un comentario