Home Realm Discovery en MVC 4 y Identity and Access Tool

 

 

En una anterior entrada, no muy lejana la verdad, vimos como configurar nuestro sitio construído en MVC 4 contra un ACS de Windows Azure para lograr la externalización de la autenticación y tener un modelo basado en claims de una forma terriblemente sencilla. Leyendo el blog de V Bertocci veo que la liberación de la RTM de la herramienta Identity and Access Tool incluye la posibilidad de que el proceso de Home Realm Discovey se pueda realizar nuestro propio sitio web en vez de tener la página por defecto para ese namespace en Windows Azure, y así, lograr una experiencia más agradable al usuario y un mismo diseño para nuestra web y esta vista. El proceso para realizar esto es realmente sencillo, no voy a volver a realizar los paso comunes a la anterior entrada, la dejor para su lectura. Lo único que haremos es fijarnos como ahora, en esta nueva versión de la herramienta disponemos de una opción para crear un controlador y una vista para tener el HRD en nuestro sitio, como acabamos de comentar.

Untitled3

Esta opción, que podemos ver en la imagen de la derecha nos permitirá seleccionar tanto el nombre del controlador como de la acción que queremos que hagan el trabajo. Una vez seleccionada, al aceptar el paso veremos como una serie de elementos son agregados a nuestro sitio MVC 4, concrétamente los siguientes:

 

  • Un nuevo controlador,por defecto llamado HrdAuthenticationController
  • Una nueva accion al controlador anterior llamado Login
  • Una vista para la acción Login
  • Un script de javascript llamado HrdAuthentication.js

 

 

A continuación,haremos un breve repaso de que contiene cada uno de estos elementos. En primer lugar el controlador como veremos es realmente sencillo, puesto que su código únicamente contiene lo siguiente.

 

    public class HrdAuthenticationController : Controller
    {
        [AllowAnonymous]
        public ActionResult Login()
        {
            ViewBag.MetaDataScript = "https://geeksms.accesscontrol.windows.net/v2/metadata/identityProviders.js?protocol=wsfederation&realm=http://localhost:13021/&version=1.0&callback=ShowSigninPage";
            return View("~/Views/HrdAuthentication/Login.cshtml");
        }
    }
 

Como puede observar, no hay nada en especial,  solamente la entrada de nuestro ViewBag MetaDataScript el cual contiene la Url de un script js alojado en nuestro ACS en la que hay una callback ( jsonp ) a un función llamada ShowSigninPage. Si buscamos en el javascript HrdAuthentication.js veremos que el contenido del mismo trae precisamente esta función.

 

// 
// Code generated by Identity and Access VS Package
// 

function ShowSigninPage(IPs) {
    $.each(IPs, function (i, ip) {
        $("#IPDiv").append(''<a href="'' + ip.LoginUrl + ''">'' + ip.Name + ''</a><br/>'');
    });
};

Fíjese como es en esta función dónde se definen como se construyen los enlaces a los diferentes Identity Providers y por lo tanto, podría ser un punto de toque al querer estilizar nuestra visa. Para terminar, el código de la vista también es terriblemente sencillo, puesto que solamente incorporar los dos js mencionados anteriormente, amén del div IPDiv usado.

 

@*
Code generated by Identity and Access VS Package
*@

<hgroup class="title">
    <h1>Log in</h1>
    <h2> using one of the identity providers below</h2>
</hgroup>

<div id="IPDiv"/>

@section Scripts {
    @Scripts.Render("~/scripts/HrdAuthentication.js");

    <script src="@ViewBag.MetaDataScript" type="text/javascript"></script>
}

Sencillo verdad? y todo sigue funcionando perfectamente.

 

Untitled5

 

 

 

Ha sido una entrada pequeña, pero creo que muy interesante  este pequeño descubrimiento…

 

Saludos

Unai