C# / ASP.NET : Firma digital y autenticación con Viafirma (I)

24 nov 2008

Aunque Viafirma ofrece todos sus servicios mediante métodos estándar ( Servicios Web y OpenID), hemos desarrollado un cliente para .Net que permite de una forma muy sencilla integrar aplicaciones desarrolladas en esta tecnología con los servicios que ofrece Viafirma.

En este artículo mostraremos cómo añadir las dlls necesarias al proyecto y cómo hacer uso de los diferentes servicios de firma digital (XAdES, Facturae, PDF sign, etc… ), autenticación (FNMT, Camerfirma, Firma profesional, DNIe, etc…),  custodia (integridad, etc…)  y verificación (CRLS, OCSP, etc…).

1- Añadir las dependencias necesarias

Es necesario que incorporemos al proyecto las siguientes dlls incluidas en el kit de desarrollo de Viafirma:  DotNetOpenId.dll, log4net.dll y ViafirmaClientDotNet.dll.

Por otro lado también necesitaremos añadir el  directorio “viafirma” y que contiene los ficheros:

  • Default.aspx: con los métodos que se ejecután cuando el proceso de autenticación o firma finalice.
  • viafirmaStyle.css: con la apariencia que viafirma adoptara para el proceso de autenticación o firma.
  • xrds.aspx: necesario para el correcto funcionamiento de la comunicación OpenID.

2- Creamos la página de acceso a la autenticación.

Creamos una primera página aspx en la que simplemente colocaremos un botón de acción asociado a un controlador de página que utilizará el API de Viafirma para autenticar con certificado digital al usuario..

El código de la aplicación de ejemplo queda como el siguiente:

<%@ Page Language="C#" Inherits="AplicacionEjemploClienteViafirma.Default" %>
<html>
<body>
<h2>Ejemplo de integración Viafirma con .Net</h2>
<form id="form1" runat="server">
<p>Pruebe la autenticación</p>
<asp:button id="autenticarButton" runat="server" text="Autenticar al usuario con certificado o dnie" onClick="autenticarButton_Click" />
</form>
</body>
</html>

3- Implementar el evento  autenticarButton_Click

En este método simplemente indicaremos al cliente de viafirma cuál es la url pública de acceso a Viafirma y cuál es la url de acceso al servicio web de Viafirma.

public void autenticarButton_Click(object sender,EventArgs e){
    // Configuramos el cliente de viafirma ( En una aplicación real esto se realiza al iniciar la aplicación)
    ViafirmaClientFactory.Init("http://pruebas.viavansi.com/viafirma","http://pruebas.viavansi.com/viafirma");
    // Obtenemos una instancia del cliente e iniciamos la autenticación
   ViafirmaClient clienteViafirma=ViafirmaClientFactory.GetInstance();
   clienteViafirma.Autenticate();
}

Con este simple código ya conseguimos que nuestra aplicación ASP.NET utilice Viafirma para que sea ésta la responsable de solicitar, validar y recuperar el certificado o DNI electrónico del usuario. Una vez que el proceso termine, Viafirma devolverá el control a la aplicación ASP.NET retornando todos los datos obtenidos del certificado.

Obtener los datos de respuesta

Una vez que Viafirma obtenga los datos del certificado de usuario invocara al método ProcessResponseAutenticacion, que se encuentra en el fichero Default.aspx dentro del directorio viafirma. Lo único que tendremos que hacer es sobreescribir dicho método con el comportamiento deseado y recuperar todos los datos del certificado del objeto UsuarioGenericoViafirma.
En este ejemplo si la autenticación ha sido correcta redireccionamos al usuario a una página de destino.

override public void ProcessResponseAutenticaction(Viafirma.Estado estado,Viafirma.UsuarioGenericoViafirma usuario){
    Viafirma.Log.Debug("Autenticación Viafirma realizada correctamente. Resultado:"+ estado);
    // Aquí ya tenemos todos los datos asociados al cliente. y redireccionar al usuario a la página destino
    // considerando el usuario ya autenticado.
    if(Viafirma.Estado.OK== estado){
        Session["resultadoAutenticacion"]= usuario;
        Uri url=new Uri(HttpContext.Current.Request.Url, HttpContext.Current.Response.ApplyAppPathModifier("~/resultadoAutenticacion.aspx"));
        HttpContext.Current.Response.Redirect(url.AbsoluteUri);
    }else{
        // Hay problemas al validar.
    }
}

Próximamane: C# / ASP.NET : Firma digital y autenticación con Viafirma (II)

Si te ha gustado esta entrada, ¿por qué no compartirla?

Sin comentarios

Deje una respuesta