Java / JEE : Firma digital y autenticación con Viafirma (I)

29 abr 2009

Este artículo pretende ser una guía rápida qué explique cómo realizar una operación de autenticación con Viafirma, de cara a obtener los datos del certificado digital del usuario. Aunque Viafirma ofrece todos sus servicios mediante métodos estándar (Servicios Web y OpenID), también disponemos  de un cliente para Java 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 dependencias necesarias a un proyecto web Java para hacer uso de los diferentes servicios de firma digital (XAdES, Facturae, PDF sign, etc… ), autenticación (FNMT, Camerfirma, Firma profesional, Ancert, ACA, Izempe,  DNIe, etc…),  custodia (integridad, etc…)  y verificación (CRLS, OCSP, etc…). El procedimiento sería el siguiente: 1.- Añadir las dependencias

Viafirma está preparado para trabajar con Maven; en este tipo de proyectos sólo será necesario añadir la dependencia a viafirma-client de la siguiente manera:

<code>
<!--  Dependencias para el cliente viafirma con soporte de OpenID -->

 org.viafirma
 viafirma-client
 [2.2.3,2.3.0)

</code>

Y poner el repositorio de librerías de VIAVANSI para poder recuperar esta librería:

<code>http://repositorio.viavansi.com/repo</code>

Si el proyecto no está basado en Maven, necesitaremos añadir manualmente los .jar que se incluyen en el directorio dependency dentro del distribuible de viafirma-client. 2.- Crear la página de acceso a la autenticación A modo de ejemplo básico vamos a crear una jsp que inicialice el cliente de Viafirma y permite al usuario iniciar el proceso de autenticación pulsando en un enlace. Este cliente utilizará el servidor público de pruebas de Viafirma desplegado en las instalaciones de Viavansi.

<code><span style="color: #bf5f3f;">&lt;%@</span><span style="color: #3f7f7f;">page</span> <span style="color: #7f007f;">import</span><span style="color: #1a1a1a;">=</span><span style="color: #2a00ff;"><em>"org.viafirma.cliente.ViafirmaClientFactory"</em></span>%&gt;
<span style="color: #bf5f3f;">&lt;%@</span><span style="color: #3f7f7f;">page</span> <span style="color: #7f007f;">import</span><span style="color: #1a1a1a;">=</span><span style="color: #2a00ff;"><em>"org.viafirma.cliente.ViafirmaClient"</em></span><span style="color: #bf5f3f;">%&gt;</span>
<span style="color: #008080;">&lt;</span><span style="color: #3f7f7f;">body</span>&gt;<span style="color: #000000;">
&lt;%</span>
</code>

if

 (!ViafirmaClientFactory.isInit()) {

// Configuración básica del cliente. ViafirmaClientFactory.init(“http://viafirma.viavansi.com/viafirma”,“http://viafirma.viavansi.com/viafirma”

);
}

if(request.getParameter(“autenticar”)!= null){ ViafirmaClient viafirmaClient = ViafirmaClientFactory.getInstance(); // Iniciamos la autenticación indicando la uri de retorno. viafirmaClient.solicitarAutenticacion(request, response,“/viafirmaClientResponseServlet”); } %> <p><a href=“?autenticar=true”>Solicitar autenticacióna>p> body>

Cuando el usuario pulse sobre el enlace “Solicitar autenticación” el usuario será redirigido a Viafirma, donde se le solicitará su certificado digital. Viafirma validará y tratará el certificado del cliente y retornará el resultado de la autenticación a la aplicación cliente que estamos desarrollando. En la jsp de ejemplo le indicamos a Viafirma que la url de retorno (donde Viafirma debe mandarnos el resultado de la autenticación) es /viafirmaClientResponseServlet . 3.- Procesar la respuesta Una vez que Viafirma obtenga la información contenida en el certificado digital, retornará los datos a la url que la aplicación cliente le indicó, por lo que el siguiente paso será definir un servlet (cuya URL en este ejemplo es /viafirmaClientResponseServlet) que se encargue de gestionar la respuesta. Para ello crearemos un servlet que extiende de org.viafirma.client.ViafirmaClientServlet, e implementaremos los métodos error(…), cancel(…) y authenticateOK(…):

publicclassViafirmaClientResponseServletextendsViafirmaClientServlet{

@Override publicvoidauthenticateOK(UsuarioGenericoViafirmausuario,HttpServletRequestrequest,HttpServletResponseresponse){ // Lógicaespecíficadelaaplicaciónparagestionar el resultadodelaautenticaciónrequest.setAttribute(“usuarioAutenticado”,usuario); request.getRequestDispatcher(“/resultadoAutenticacion.jsp”).forward(request,response); }

@Override publicvoidcancel(HttpServletRequestrequest,HttpServletResponseresponse){ // Gestiónndecancelaciónndelusuarioalautenticar o firmar request.setAttribute(“error”,“El usuario ha cancelado la autenticación”); request.getRequestDispatcher(“/resultadoAutenticacion.jsp”).forward(request,response); }

@Override publicvoiderror(CodigoErrorcodError,HttpServletRequestrequest, HttpServletResponseresponse){ // Gestiónde error alautenticar o firmar request.setAttribute(“codError”,codError); request.getRequestDispatcher(“/resultadoAutenticacion.jsp”).forward(request,response); }

}

En este ejemplo vemos un ejemplo de implementación, en el que la aplicación simplemente guarda en request el objeto UsuarioGenericoViafirma que contiene todos los datos que aparecen en el certificado digital. Obviamente cada aplicación, en función de su lógica de negocio, deberá realizar la implementación específica que requiera. 4.- Adaptar la plataforma al skin de la aplicación cliente. La página donde se solicita el certificado digital reside en Viafirma. Sin embargo, a través de CSS podremos conseguir que el usuario no aprecie un cambio de interfaz, de forma que el salto de la aplicación a Viafirma parezca transparente a nivel estético. Para hacer que Viafirma se adapte fácilmente al estilo visual de nuestra aplicación cliente, sólo tendremos que colocar el fichero viafirmaStyle.css en el raíz de nuestra aplicación y redefinir el aspecto visual de la interfaz  de Viafirma. 5.- Descarga el cliente y pruébalo tu mismo Descargar ejemplo de autenticación utilizando el cliente Java para obtener los datos del certificado digital. Próximamente: Java / JEE : Firma digital XADES y facturae con Viafirma (II)

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

17 Respuestas Para “Java / JEE : Firma digital y autenticación con Viafirma (I)”

  1. ditmgl 29 de abril de 2009 at 11:47 hrs. #

    Es genial que haya un ejemplo de funcionamiento con J2EE, pero tengo una duda.

    ¿Pero ViafirmaClientFactory solo puede utilizar el init si se pasacomo parametro un Properties y no dos Strings?,.

    O almenos asi esta declarado en el ApiDocs:
    public static void init(java.util.Properties propiedades)

  2. Félix García Borrego 29 de abril de 2009 at 13:13 hrs. #

    Hola,
    Tienes razón en que el javadoc publicado en viafirma.org no está actualizado, y de hecho corresponde a una versión bastante antigua de Viafirma.

    ViafirmaClientFactory permite iniciar el cliente desde un conjunto de propiedades, pero desde las versiones recientes también permite una inicialización rápida como la que se muestra en el ejemplo.

  3. dacedos 30 de abril de 2009 at 12:39 hrs. #

    Hola Felix, no consigo encontrar la clase: ViafirmaClientServlet de la cual extender.

    Ademas tengo un problema similar al de ditmgl, debe ser que ademas del api la libreria esta desactualizada porque descargue ayer mismo viafirma-client-1.3.2-distribucion.zip desde viafirma.org y eclipse espera encontrar el properties como parametro de init.

    Se ha publicado alguna version posterior de viafirma?

  4. Félix García Borrego 30 de abril de 2009 at 13:47 hrs. #

    Hola,
    He actualizado el post incluyendo el enlace de descarga de la aplicación cliente.

  5. jlfd 02 de mayo de 2009 at 14:58 hrs. #

    ¿Hasta qué versión está liberada Viafirma?, ¿qué página web se debe tomar como referencia viafirma.org o viafirma.com?, ¿vais a abrir una cuenta en Twitter o en alguna otra red social para hablar de las novedades de la plataforma?, ¿Hay algún seminario o conferencia próximamente en la que vayáis a hablar de este producto?

  6. Félix García Borrego 05 de mayo de 2009 at 15:40 hrs. #

    Hola,
    Te intento responder por partes:
    - Viafirma está liberada en la rama 1.x (que se encuentra completamente en googlecode), la nueva versión 2.x no ha sido liberada bajo licencia libre (aunque lo será, todavía no sabemos si totalmente o parcialmente).

    -La página de referencia es viafirma.com, por falta de tiempo la .org está desactualizada. Por cierto, te adelante que estamos a punto de sacar una nueva página viafirma.org que ofrezca un servicio gratuito de autenticación y firma mediante Viafirma.

    -Respecto a foros/red social/twitter estos temas los tenemos en la cabeza (tenemos demasiados planes en la cabeza) y utilizaré tu sugerencia para terminar de animar a mis compañeros :p .

  7. antonio 05 de junio de 2009 at 07:53 hrs. #

    Hola,
    Estoy trabajando con viafirma para implementarselo a nuxeo, y mi sorpresa es cuando llamo al respositorio que me ofreceis:

    Viavansi
    Viavansi Repositorio
    http://repositorio.viavansi.com/repo

    es como si no tuviera permisos de entrada, y al importar librerías una po una me esta dando errores exactamente cuando uso el método prepararfirma en la clase Qname

  8. Félix García Borrego 06 de junio de 2009 at 13:33 hrs. #

    Hola Antonio,
    he comprobado y el repositorio Maven funciona correctamente:
    http://repositorio.viavansi.com/repo/org/viafirma/viafirma-client/1.4.0/viafirma-client-1.4.0.jar
    En cualquier caso, y dado que entiendo que pretendes utilizarlo para un proyecto opensource, tienes a tu disposición todo el código de la versión GPL en http://code.google.com/p/viafirma/.

    Por otro lado, en el artículo se indica una url para descargar el kit de desarrollo para Java. Ten en cuenta que algunos de los métodos que aparecen en el kit no están implementados en la versión GPL.

  9. antonio 08 de junio de 2009 at 08:24 hrs. #

    hola de nuevo Felix, pero siento decirte que las dependecias no funcionan , me sale esto exactamente

    “Forbidden

    You don’t have permission to access /artifactory/libs-releases// on this server.”

    Esque yo necesito todas las librerías no solo la de ViaFirma-Client

    Aver si me pudieras decir porque no tengo permisos, un saludo y un gran trabajo

  10. Félix García Borrego 16 de junio de 2009 at 18:25 hrs. #

    Hola Antonio,
    Desconozco cual puede ser el problema para acceder al repositorio, pero en el peor de los casos siempre puedes descargarte el zip que se indica en el artículo que contiene TODO lo que puedes necesitar(fuentes, dependencias, etc…)

    Un saludo.

  11. Pedro Peña 07 de agosto de 2009 at 12:49 hrs. #

    Hola,

    Estoy intentando integrar viafirma con Alfresco. Pero de momento no he podido hacer funcionar la parte de firma del war del viafirma-server-core.
    Estoy utilizando la última revisión del repositorio de googlecode (la 201, versión 1.3.10). He logrado compilarla quitando los ficheros que entiendo que son de test e innecesarios TestXmlSign.java, CustodiaDB.java y TestQR.java ya que tiraban de clases que no existían (por ejemplo org.viafirma.util.OracleManagerFile en el CustodiaDB.java).

    Una vez compilada y desplegado el war la autenticación mediante certificado digital funciona perfectamente, pero no así la firma. Esto pasa también con la demo gpl que hay en viafirma.org. ¿Realmente la firma electrónica está soportada en la versión gpl?

    Revisando los logs compruebo que el documento parece que se firma en org.viafirma.nucleo.firma.imp.FirmaOpenocesAppletBridgeImp o al menos se inicia la solicitud de firma. Me choca que se inicie la solicitud y en el código fuente veo que se genera la firma pero todavía no se ha seleccionado en la interfaz web el certificado. Después si se selecciona el certificado y se pulsa en firma aparece el error “El certificado no ha sido encontrado. Indique un certificado válido”.

    Un saludo y muchas gracias por liberar el proyecto. Espero que actualicéis la rama gpl pronto.

  12. Félix García Borrego 16 de septiembre de 2009 at 09:12 hrs. #

    Hola Pedro, disculpa por la tardanza en responder, en el caso concreto de la versión GPL de demos que tenemos publicada el problema era un parámetro de configuración que faltaba, en concreto:

    Este parámetro es precisamente una de las nuevas features de viafirmagpl que han sido portadas desde la versión comercial y en la versión GPL la documentación no está actualizada.

  13. Rocio 28 de septiembre de 2009 at 18:46 hrs. #

    Hola,
    Con el ejemplo que está en el punto 5. se puede implementar la autenticación mediante dnie, necesito añadirla a mi aplicación.

    Como puedo hacerlo?

    Muchas gracias.
    Saludos

  14. Angel 19 de abril de 2010 at 16:41 hrs. #

    Hola!

    Quiero integrarlo utilizando Adobe Flex como interfaz web, alguien sabe que diferencias debo tener en cuenta?

    Muchas gracias

  15. Félix García Borrego 20 de abril de 2010 at 08:31 hrs. #

    Hola Angel,
    En lo referente a Flex, nuestra experiencia es muy escasa y actualmente no existe un cliente nativo para Flex.
    Por otro lado el protocolo de comunicación usado por Viafirma es OpenId por lo que no sería dificil realizar una integración ligera en esta plataforma usando un cliente para OpenId en Flex.

  16. JoseCastro 02 de mayo de 2014 at 23:06 hrs. #

    Buenas, el momento de descargar el cliente para probarlo, me encuentro con la pagina caída, podrías volver a subirlo, gracias.

  17. Jorge Castillo 06 de mayo de 2014 at 12:52 hrs. #

    Hola Jose,

    Ya está actualizada la URL a la nueva ubicación: http://developers.viafirma.com/sdk-java

    Saludos,

Deje una respuesta