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
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
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")) |
Para probarlo, no tenemos más que volver a entrar a la aplicación con esa identidad
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
Este es el tercer y último post de una serie relacionada con un evento que tuvimos con el Grupo
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?