Windows Azure Appfabric Access Control Service ACS (2/3)

 

Este post es el segundo de una serie relacionada con un evento que tuvimos con el Grupo de usuarios de Valencia, puedes encontrar el primero en Windows Azure AppFabric Access Control Service ACS (1/3)

En el primer post vimos como realizar una autenticación básica en ACS con los proveedores de Google y Live ID, en este post vamos a ver cómo complementar la aplicación utilizando el API de Winfdows Identity Foundation para explorar la información que nos envía el servicio de ACS.

 

Ver información extendida de los claims

Llegados a este punto, ya hemos conseguido tener un sitio web con la autenticación delegada, no hay que preocuparse de validar, de que se creen usuario y contraseña nuevo, recordar contraseñas, políticas, blah blah blah… pero… tampoco tenemos ningún dato de los usuarios que pasan por nuestra web.

En esta segunda parte del ejercicio, vamos a mostrar la información que nos devuelve el servicio de ACS en el ticket que nos envía una vez el usuario se ha autenticado contra el Identity Provider (IP) preferido.

Podemos extraer información relativa a la autenticación del perfil que se ha cargado en el proceso.

var claimsppal = (Microsoft.IdentityModel.Claims.IClaimsPrincipal) HttpContext.Current.User;

var identity = (Microsoft.IdentityModel.Claims.IClaimsIdentity)claimsPpal.Identity;

y una vez tenemos la interfaz (como he echado de menos Razor en estas líneas) podemos obtener la información que nos envían fácilmente

%>
        
        <p>Authentication type: <%:identity.AuthenticationType %></p>
        <p>Name: <%:identity.Name %></p>

        <%   
       
        var claims = identity.Claims;
        gv.DataSource = claims;
        gv.DataBind();      
        
    %>   

<asp:GridView ID="gv" runat="server" />

Por ejemplo, con éste código, hemos obtenido 4 tipos de Claims diferentes

claims/nameidentifier: El ID único de cuenta

claims/name: El nombre de usuario (David Salgado)

claims/emailaddress: El mail  (XXXX@gmail.com )

claims/identityprovider: Cómo se ha autenticado. Google, Live…

Con estos datos ya podemos empezar a construir Base de Datos de nuestros usuarios… o al menos a saludarles cuando entren al sitio!!

 

Creando una regla sencilla

Determinados usuarios pueden tener un rol específico dentro de la aplicación, por ejemplo administradores, redactores, editores,… con las reglas de Access Control Service podemos, por ejemplo, incluir un claim role en la respuesta. Vamos a quedarnos con el nameidentifier de un usuario autenticado en el paso anterior, por ejemplo… (obviamente lo he editado, pero será algo parecido)

Value: https://www.google.com/accounts/o8/id?id=WEWEEWEWEWEWEWEWEWEWE

Volvemos al portal de Access Control, a la parte de los namespaces y entramos en la configuración del namespace que habíamos creado anteriormente SitioACS.

Hacemos click en la opción Rule Groups del menú de navegación

image

Y entramos en la configuración específica. Además de las que se habían creado automáticamente, vamos a crear (Add) una nueva regla

IF  Identity Provider: Google

AND Input Claim Type : (Select) nameidentifier

AND Input Claim Value: (Enter) https://www.google.com/accounts/o8/id?id=WEWEEWEWEWEWEWEWEWEWE

THEN Output Claim Type: (Select)  role

Output Claim Value Enter: Editores

Rule Information. Regla de editor

Con lo que tenemos lo siguiente

image

Ahora vamos a modificar la aplicación, para que si se conecta un usuario que forme parte del rol Editores, muestre información diferente

if (claimsPpal.IsInRole("Editores"))
{
    %> <h2>Información importante para Editores </h2><%
}

Para probarlo, no tenemos más que volver a entrar a la aplicación con esa identidad

image

 

Próximo post

Para el tercer y último post de la serie, dejaremos la explicación de cómo personalizar la experiencia de logIn.

 

 

Happy Hacking!

 

David Salgado – @davidsb

Publicado por

2 comentarios en “Windows Azure Appfabric Access Control Service ACS (2/3)”

  1. Hola David.
    Muy bueno el artículo, pero tengo 1 duda y una pregunta.
    Duda: ¿Cómo estableces la variable “claimsPpal”?
    Pregunta: Estoy desarrollando una aplicación con MVC3 usando Razor, en mi caso, ¿cuál sería la forma adecuada de comprobar el rol desde la vista?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *