Integración FIDO - Android con aplicaciones WEB

En este tutorial, se verá como integrar FIDO - Android para firmar documentos desde una aplicación WEB con dispositivos móviles.

Se asume que ya se tiene instalado el aplicativo. De no ser así acceder a la siguiente página: Android descargar e instalar. El único requisito adicional es contar con un navegador moderno que soporte AJAX.

El ejemplo utiliza NodeJS pero puede ser aplicado a cualquier lenguaje que permita la publicación de servicios API Rest.

Si no tiene instalado NodeJS, puede seguir los pasos descritos en el siguiente enlace: NodeJS

Una vez instalado, ejecutar las siguientes instrucciones para preparar el proyecto y editar el primer archivo del proyecto:

  1. express firmaweb
  2. cd firmaweb
  3. npm install
  4. nano views/index.jade

Con los pasos anteriores en la consola de comandos, se abrirá un editor de texto donde se puede copiar el siguiente código:

  1. extends layout
  2. block content
  3. h1= title
  4. p Welcome to #{title}
  5. a(href="app://bo.gob.adsib.fido_android/?url=https://tutoriales.adsib.gob.bo/_18/prueba.pdf&token=JWT eyJ0eX&urlpost=https://tutoriales.adsib.gob.bo/_18/file") APP

Lo único que se hizo fue aumentar una etiqueta HTML <a> que apunta a la ruta app://bo.gob.adsib.fido_android/?url=https://tutoriales.adsib.gob.bo/_18/prueba.pdf&token=JWT eyJ0eX&urlpost=https://tutoriales.adsib.gob.bo/_18/file

A continuación se detalla el significado de las diferentes partes.

  • app://bo.gob.adsib.fido_android/ Esta primera parte debe incluirse sin cambios y es para decirle al sistema operativo Android que debe llamar a la aplicación FiDo Android disponible en: firmadigital.bo.
  • url=https://tutoriales.adsib.gob.bo/_18/prueba.pdf Después del símbolo ? vienen los parámetros y el primero es la url de donde será descargdo el documento que se desea firmar.
  • token=JWT eyJ0eX El siguiente parámetro es el token que se utilizará para poder acceder a los servicios. Este valor será utilizado en la cabera Authorization.
  • urlpost=https://tutoriales.adsib.gob.bo/_18/file Finalmente está el parámetro urlpost que establece la ruta del servicio que recibirá el documento firmado.

Si abre el enlace APP desde el navegador de un dispositivo móvil con la aplicación instalada se le llevará a la ventana para firmar el documento.

Finalmente es necesario implementar el servicio API Rest que recibirá el documento firmado. El servicio utiliza el método POST y contendrá el siguiente body:

  1. {
  2. "base64": "cHJ1ZWJh"
  3. }

Donde base64 es el documento firmado. En caso de requerir algún identificador, el mismo podrá ser incluido como parametro en el urlpost ya que la ruta se llama exactamente como es pasada a la aplicación.

Para implementar el servicio en nuestro ejemplo ejecutar:

  1. nano routes/index.js

Desde la consola de comandos y agregamos el siguiente código:

  1. ...
  2. router.post('/file/', function(req, res, next) {
  3. if (req.headers.authorization) {
  4. const parts = req.headers.authorization.split(' ');
  5. const token = parts[1];
  6. if (parts[0] === 'JWT') {
  7. if (token) {
  8. let tokenDecoded;
  9. try {
  10. tokenDecoded = jwt.decode(token, 'ADSIB');
  11. } catch (error) {
  12. throw Error('Falló la autenticación del token.');
  13. }
  14. res.status(402).json({
  15. mensaje: 'Error de prueba'
  16. });
  17. const fs = require('fs');
  18. fs.writeFileSync(`${__dirname}/firmado.pdf`, Buffer.from(req.body.base64, 'base64'));
  19. res.status(201).json({
  20. mensaje: 'Archivo guardado correctamente.'
  21. });
  22. } else {
  23. res.status(402).json({
  24. mensaje: 'Debe proporcionar un token.'
  25. });
  26. }
  27. } else {
  28. res.status(402).json({
  29. mensaje: 'El token debe empezar con JWT.'
  30. });
  31. }
  32. } else {
  33. res.status(402).json({
  34. mensaje: 'Debe proporcionar credenciales de acceso.'
  35. });
  36. }
  37. });
  38. ...

Para ejecutar el programa simplemente escribir en la consola el siguiente comando:

  1. npm start

O también puede descargar el ejemplo completo del siguiente enlace firmaweb.tar.gz

© ADSIB 2019 Bolivia