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

📢 WEBINAR · Seguridad y legalidad en los procesos de transformación digital = Firma Electrónica 📢

26 Mayo 2022 · 11:00h (hora Madrid GMT+2)

¡Regístrate!

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.

Te 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…).

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.

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>

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.
    }
}

A continuación te mostramos los pasos a seguir para utilizar los servicios de firma digital ( XAdes, Facturae, …), autenticación (FNMT, Firma Profesional, ANCERT, …) y verificación de validez de certificados ( OCSP, CRLs, …) desde aplicaciones ASP.NET gracias a Viafirma.

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.

Añadir referencias para firma digital
Añadir referencias para firma digital ( openid , viafirmaClient, log4net)

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

  • Default.aspx: con los métodos que deben ser sobreescritos con el comportamiento específico a ejecutar cuando finalice el proceso de firma.
  • viafirmaStyle.css: con la apariencia que viafirma adoptara para el proceso de autenticación o firma. Este css puede ser adaptado a la identidad corporativa de la aplicación cliente.
  • xrds.aspx: necesario para el correcto funcionamiento de la comunicación OpenID.

Crear una página de ejemplo desde la que realizar la firma

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 firmar digitalmente un fichero de ejemplo con el 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=»firmarButton» runat=»server» text=»Firmar un documento de ejemplo con Viafirma» onClick=»FirmarButton_Click» />
</form>
</body>
</html>

Implementar el método  FirmarButton_Click

En este método simplemente indicaremos al cliente de viafirma cuál es la URL pública de acceso a Viafirma, cuál es la url de acceso al servicio web de Viafirma, y registraremos un fichero para su firma.

public void FirmarButton_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://viafirma.viavansi.com/viafirma", http://viafirma.viavansi.com/viafirma);
    // Recuperamos / Generamos el contenido del documento a firmar. ( Como ejemplo generamos un txt ) 
    byte[] datos_a_firmar = System.Text.ASCIIEncoding.ASCII.GetBytes("Contenido del documento firmado");
    // Enviamos a firmar el documento
     ViafirmaClient clienteViafirma = ViafirmaClientFactory.GetInstance();
    // Registramos el documento que deseamos firmar. Obteniendo un identificador temporal.
    string idTemporalFirma = clienteViafirma.PrepareFirmaWithTypeFileAndFormatSign("FicheroEjemplo.txt", typeFile.txt, typeFormatSign.XADES_EPES_ENVELOPED, datos_a_firmar);
    System.Console.Write("idTemporalFirma: " + idTemporalFirma);
    // Iniciamos el proceso de firma redireccionando al usuario a Viafirma interactuando con el usuario..
    clienteViafirma.Sign(idTemporalFirma);
}

Con este simple código ya conseguimos que nuestra aplicación ASP.NET utilice Viafirma para que sea ésta la responsable de solicitar, validar, recuperar el certificado o DNI electrónico del usuario y firmar el documento digitalmente.  En este ejemplo se ha realizado la firma de un fichero de texto utilizando en formato XADES, pero de una forma muy similar se podría haber optado por realizar la firma de un pdf o de una factura electrónica.

Una vez que el proceso termine, Viafirma devolverá el control a la aplicación ASP.NET retornando todos los datos obtenidos del certificado, junto con el identificador de firma asociado al documento firmado.

Obtener los datos de respuesta

Una vez que Viafirma obtenga los datos del certificado de usuario invocará al método ProcessResponseSign, 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 de la firma del objeto FirmaInfoViafirma.
En este ejemplo, si la firma ha sido correcta, redireccionamos al usuario a una página de destino.

override public void ProcessResponseSign(Viafirma.Estado estado,Viafirma.FirmaInfoViafirma firma){

    Viafirma.Log.Debug("Firma Viafirma realizada correctamente.");
    // Aquí ya tenemos todos los datos asociados al cliente y a su firma.    
    //redireccionamos al usuario a la p gina destino considerando el usuario ya ha finalizado la firma.
    if(Viafirma.Estado.OK== estado){
       Session["resultadoFirma"]= firma;
       Uri url=new Uri(HttpContext.Current.Request.Url, HttpContext.Current.Response.ApplyAppPathModifier("~/resultadoFirma.aspx"));
       HttpContext.Current.Response.Redirect(url.AbsoluteUri);
    } else{
      // Hay problemas al firmar.
    }
}

A continuación se muestran algunas capturas de pantalla de la aplicación de ejemplo ASP.NET en acción:

Página inicial de la aplicación de ejemplo: (contenida en el Kit de desarrollo de Viafirma)

Ejemplo de firma desde ASP.NET 1

La aplicación ASP.NET interactuando con Viafirma para realizar la firma.

Ejemplo de firma desde ASP.NET 2

La aplicación ASP.NET muestra algunos de los datos retornados tras el proceso de firma.

Ejemplo de firma desde ASP.NET 3 retornando los resultados de la firma