SDK viafirma platform

Autenticación sin cliente rico (applet, Viafirma Desktop...): SSL client auth

Desde la versión 3.16 de viafirma platform se soporta una modalidad de autenticación basada en SSL client auth (handshake entre el servidor y el navegador por el cual se solicita al cliente un certificado digital). Para utilizarlo, es necesario disponer del módulo Viafirma ssl-authenticator. En este caso, no aplican los parámetros de Policy de autenticación; el usuario podrá escoger cualquier certificado de usuario, y se devolverán los datos a la aplicación, la cual podrá decidir qué hacer con el usuario (permitirle acceder, denegar acceso, verificar si la Autoridad de Certificación es adecuada, etc.).

El proceso que se sigue es el siguiente:

  • La aplicación cliente prepara la operación de autenticación: se invoca a Platform recibiendo como respuesta un operationId y una URL de redirección. Como parámetro en la llamada, la aplicación cliente pasa una URL de callback, a la cual se hará un GET añadiendo como query param el operationId.
  • La aplicación cliente recibe como respuesta el operationId y la URL a la que redirigir. Por seguridad, es recomendable almacenar este operationId unido, por ejemplo, a la IP o ID de sesión, de forma que se puede comprobar en el último paso que estos valores no han cambiado.
  • Se redirige al usuario a la URL de redirección, donde se le pide el certificado de usuario.
  • El usuario escoge su certificado y la plataforma lo valida, almacenando esta información de validación. Posteriormente, redirige al usuario a la URL de callback pasada en el primer paso, y añadiendo como query param operationId=XXXX.
  • La aplicación cliente recibe esta llamada, recoge el operationId, y lo utiliza para pedirle a Viafirma Platform los datos de validación. En este paso también podría realizar una verificación, por ejemplo, de que la IP o el sessionId son los que había en el primer paso para ese operationId.
  • Una vez recibidos los datos del certificado del usuario, la aplicación cliente continúa con su propia lógica de negocio.

Para hacer esta integración, se pueden utilizar los clientes Java o .NET, o realizar directamente llamadas a servicios REST.

Java

Podemos encontrar un ejemplo de uso de esta lógica de invocación directa en la aplicación de ejemplo.

Como se verá en ese ejemplo de código, se realiza una preparación de la operación, devolviendo el servidor un objeto con el código de operación y el enlace al que redirigir al usuario.

ConfigureUtil.initViafirmaClient();
ViafirmaClient viafirmaClient = ViafirmaClientFactory.getInstance();
SSLClientAuthOperationResponse result = viafirmaClient.prepareSSLClientAuthentication(callbackURL);
String redirectURL = result.getRedirectURL();
response.sendRedirect(redirectURL);

La callbackURL es una URL interna de la aplicación a la que se llamará recibiendo el operationId como query param. En el caso de la aplicación de ejemplo, esta URL es exampleAuthenticationSSLClientAuthResult.jsp, que contiene la siguiente lógica:

ConfigureUtil.initViafirmaClient();                                        
ViafirmaClient viafirmaClient = ViafirmaClientFactory.getInstance();
String operationId = (String) request.getParameter("operationId");
CertificateValidationResponse certificateValidationResponse = viafirmaClient.getCertificateValidationResponse(operationId, null);

Pudiendo ya hacer uso de los valores incluidos en CertificateValidationResponse.

.NET

En proceso.