jueves, 4 de marzo de 2010

Elemento web visualizador de notificaciones

De un tiempo a esta parte he estado trabajando la parte de autenticación de SharePoint 2010 para comprobar de primera mano las novedades que se nos ofrecen. Básicamente, la novedad principal es que esta versión de SharePoint se ha construido sobre WIF (Windows Identity Foundation) y, por lo tanto, soporta autenticación basada en notificaciones, o claims based authentication, como yo lo he conocido toda la vida. Próximamente publicaré alguna entrada donde explique algo acerca de este nuevo mecanismo de autenticación (nuevo para SharePoint, pero no nuevo para el mundo) pero, por ahora, os voy a explicar como crear un elemento web para visualizar la información que nos ofrece un sistema de estas características para ir abriendo boca.

Lo primero que debemos hacer es crear un nuevo proyecto de tipo Visual Web Part que encontraremos en la sección SharePoint | 2010 de Visual Studio 2010. Al igual que con cualquier proyecto que construyamos sobre la nueva plataforma de Microsoft, es imprescindible que seleccionemos .NET Framework 3.5, ya que es sobre esta versión sobre la cual está construido el producto.

image

Como estamos creando un elemento web visual sólo tendremos la opción de desplegarlo dentro de una solución de tipo granja, y así lo haremos.

image

Visual Studio creará un proyecto con varios elementos para nosotros. En mi caso, y por claridad, he cambiado las referencias a VisualWebPart1 por ClaimsListWebPart. Esto no es necesario pero, si lo hacéis, comprobad que adecuáis todo el código al cambio que habéis hecho. En mi caso, el explorador de soluciones ha quedado tal y como muestra la siguiente figura:

image

Ahora necesitamos añadir un control para visualizar una lista de reclamaciones o claims y, para ello, qué mejor que un GridView. Lo primero que tendremos que hacer es añadirlo al final del fichero ClaimsListUserControl.ascx.

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %> 
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ClaimsListUserControl.ascx.cs" Inherits="ClaimsListWebPart.ClaimsListUserControl" %>
<asp:gridview id="ClaimsGridView" runat="server"></asp:gridview>

Antes de poder acceder a las funcionalidades relacionadas con los proveedores de autenticación del nuevo modelo de SharePoint 2010 deberemos añadir la referencia al ensamblado Microsoft.IdentityModel.dll. Lo encontraréis en la siguiente ubicación:

c:\program files\reference assemblies\microsoft\windows identity foundation\v3.5\Microsoft.IdentityModel.dll

Una vez hecho esto abrimos el fichero ClaimsListUserControl.ascx.cs y añadimos los dos siguientes trozos de código. Primero, incluyo la referencia al espacio de nombres Microsoft.IdentityModel.Claims.

using Microsoft.IdentityModel.Claims;

A continuación, inserto en el cuerpo del método Page_Load() lo siguiente:

IClaimsPrincipal claimsPrincipal = Page.User as IClaimsPrincipal;
IClaimsIdentity claimsIdentity = (IClaimsIdentity)claimsPrincipal.Identity;
 
ClaimsGridView.DataSource = claimsIdentity.Claims;
Page.DataBind(); 

Como véis, no cambia demasiado de la manera típica de acceder a perfiles o identidades en el modelo clásico de autenticación que conocíamos hasta ahora. Ahora estamos listos para desplegar la solución pulsando con el botón derecho del ratón sobre nuestro proyecto y seleccionando la opción desplegar. Lo único que nos quedará entonces por hacer será acceder a algún portal que tengamos configurado para usar autenticación basada en notificaciones y añadir el elemento web que acabamos de desarrollar. Lo encontraremos, si no hemos hecho ningún cambio, en la categoría Custom y bajo el nombre VisualWebPart1.

image

El resultado de añadir el webpart es similar a lo siguiente:

image

Para dar algún detalle sobre lo que estamos viendo, podemos ver los siguientes campos en la tabla que se nos muestra:

  • ClaimType que podríamos entender como nombre del atributo o propiedad del perfil.
  • Issuer que identifica a la entidad que nos está ofreciendo la información. En este caso, nosotros se la estamos pidiendo siempre a SharePoint.
  • OriginalIssuer que identifica a la primera entidad que está ofreciendo la información o, con otras palabras, la entidad que conoce realmente la información. Como véis, algunos datos los da Windows como, por ejemplo, el nombre de inicio de sesión (userlogonname), otros los da el SecurityTokenService y otros los da directamente SharePoint.
  • Value que indica el valor del atributo o propiedad que nos está llegando.
  • ValueType que hace referencia al tipo de datos del atributo o propiedad.

Otra cosa que merece la pena comentar es el formato de algunos valores como, por ejemplo, userid, name o tokenreference. En la figura podéis ver cosas como 0#.w|2010rc\administrator. Pues bien, la letra “w” indica que nos hemos estamos utilizando autenticación Windows. Veamos lo que pasa cuando accedemos con el mismo usuario mediante autenticación basada en formularios (recordad que estamos usando LDAP para autenticar contra el mismo directorio activo).

image

Como véis, aquellos atributos que antes contenían la cadena 0#.w han pasado a contener la cadena 0#.f (de forms). Además, vemos que ahora ningún atributo proviene en su origen de Windows, mientras que aparecen algunos que provienen de Forms:LDAPMembershipProvider o de Forms:LDAPRoleProvider, que son los nombres del proveedor de perfiles y del proveedor de roles, respectivamente, que tenemos configurados en nuestra aplicación web.

En próximas entradas explicaré cómo configurar una aplicación web para que acepte autenticación basada en reclamaciones, o posibles usos de esta tecnología en el mundo real.

0 comentarios: