Información y enlaces
Participa comentando, viendo lo que otros tienen que decir, o enlazandolo desde tu blog.
Java / JEE : Firma digital y autenticación con Viafirma (I)
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:
<!-- Dependencias para el cliente viafirma con soporte de OpenID -->
<dependency>
<groupId>org.viafirma</groupId>
<artifactId>viafirma-client</artifactId>
<version>[2.2.3,2.3.0)</version>
</dependency>
Y poner el repositorio de librerías de VIAVANSI para poder recuperar esta librería:
http://repositorio.viavansi.com/repo
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.
<%@page import=“org.viafirma.cliente.ViafirmaClientFactory”%> <%@page import=“org.viafirma.cliente.ViafirmaClient”%> <body> <%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ón</a></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(…):
public class ViafirmaClientResponseServlet extends ViafirmaClientServlet{
@Override public void authenticateOK(UsuarioGenericoViafirma usuario,HttpServletRequest request, HttpServletResponse response) { // Lógica específica de la aplicación para gestionar el resultado de la autenticación request.setAttribute(“usuarioAutenticado”, usuario); request.getRequestDispatcher(“/resultadoAutenticacion.jsp”).forward(request, response); }
@Override public void cancel(HttpServletRequest request, HttpServletResponse response) { // Gestiónn de cancelaciónn del usuario al autenticar o firmar request.setAttribute(“error”, “El usuario ha cancelado la autenticación”); request.getRequestDispatcher(“/resultadoAutenticacion.jsp”).forward(request, response); }
@Override public void error(CodigoError codError, HttpServletRequest request, HttpServletResponse response) { // Gestión de error al autenticar 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
Próximamente: Java / JEE : Firma digital XADES y facturae con Viafirma (II)
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)