Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementación de firma por lotes (batchsign) #3

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

Eduardolgg
Copy link

El código que compone el siguiente commit implementa la firma por lotes en
Android, de esta forma se puede enviar desde el navegador un único intent
indicando como host batchsign. Esto es de especial interes en Chrome ya que
no permite el envío de más de un intent sin la interacción del usuario; por
otro lado también mejora la interacción de la aplicación con el usuario
al tener este último que introducir la firma digital una única vez para actuar
en un conjunto de documento.

El formato del intent es el siguiente:
Host: batchsign
query: se compone por los siguientes parámetros
fileid: identificador del batch a firmar
rtservlet: Localización desde la que se descarga el xml
con la definición de firmas
key: Clave de cifrado (opcional).
auth: Un objeto json en formato { "k": "nombre_clave",
"v": "valor_a_enviar" }

Un Ejemplo de intent
intent://batchsign?fileid=zMX5J64THr4ZJ5lC1nsL&rtservlet=https%3A%2F%2Fwww.rtservlet.org%2Fservlet_afirma%2FRetrieveService&key=64782813#Intent;scheme=afirma;package=es.gob.afirma;end

El procesado del xml y las firmas lo dirige la clase WebBatchSignActivity la
cual tiene un comportamiento similar a WebSignActivity.

Ejemplo del fichero XML con la definición de los documentos a firmar:

https://remoteserver/01_dni.pdf CAdES sign Zm9ybWF0PUNBZEVTIERldGFjaGVkCm1vZGU9ZXhwbGljaXQKcmVmZXJlbmNlc0RpZ2VzdE1ldGhvZD1odHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYKZmlsdGVycz1ub25leHBpcmVkOnRydWU7aXNzdWVyLnJmYzIyNTQ6KCYoIShDTj1DaWJlckNlbnRybyopKSghKENOPUdvYkNhbkNBKSkoIShPPUdvYmllcm5vIGRlIENhbmFyaWFzKSkoIShPPVBLSSkpKCEoTz1ET19OT1RfVFJVU1QqKSkpO3NpZ25pbmdDZXJ0OnRydWUK es.gob.afirma.signers.batch.SignSaverHttpPost VVJMPWh0dHBzOi8vMTkyLjE2OC4yLjE0Mi8K https://remoteserver/01_doc02.pdf CAdES sign Zm9ybWF0PUNBZEVTIERldGFjaGVkCm1vZGU9ZXhwbGljaXQKcmVmZXJlbmNlc0RpZ2VzdE1ldGhvZD1odHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYKZmlsdGVycz1ub25leHBpcmVkOnRydWU7aXNzdWVyLnJmYzIyNTQ6KCYoIShDTj1DaWJlckNlbnRybyopKSghKENOPUdvYkNhbkNBKSkoIShPPUdvYmllcm5vIGRlIENhbmFyaWFzKSkoIShPPVBLSSkpKCEoTz1ET19OT1RfVFJVU1QqKSkpO3NpZ25pbmdDZXJ0OnRydWUK es.gob.afirma.signers.batch.SignSaverHttpPost VVJMPWh0dHBzOi8vZGVzdGluby9TdG9yYWdlU2VydmljZQpmaWxlSWQ9aFZOb1BQY211amc4VDVva0JUWTcK

En el XML hay que destacar el apartado signsaver, la clase encargada del procesamiento es específica para
la firma en android y no puede utilizarse otra devido a las limitaciones de la arquitectura.

Para el almacenamiento de la firma es posible utilizar dos parámetros URL
y fileId:

El parámetro URL especifica la dirección a la que enviar el resultado de
la firma, es un parámetro requerido, y el request se envía con los
parámetros op, v, id y dat tal y como se realiza en las solicitudes de sign,
cosign y countersign.

El parámetro fileId es opcional y permite especificar el id con el que se
envía la firma, en caso de no indicarlo se utiliza el mismo id del campo
singlesign.

TODO:

  • Mostrar un mensaje informando de la cantidad de ficheros a firmar antes
    de que se inicie el proceso de firma.
  • Permitir al usuario abrir/ver los documentos recibidos antes de firmarlos
  • Admitir documentos en base
  • Implementación de concurrenttimeout

Ver:

El código que compone el siguiente commit implementa la firma por lotes en
Android, de esta forma se puede enviar desde el navegador un único intent
indicando como host batchsign. Esto es de especial interes en Chrome ya que
no permite el envío de más de un intent sin la interacción del usuario; por
otro lado también mejora la interacción de la aplicación con el usuario
al tener este último que introducir la firma digital una única vez para actuar
en un conjunto de documento.

El formato del intent es el siguiente:
   Host: batchsign
   query: se compone por los siguientes parámetros
     fileid: identificador del batch a firmar
     rtservlet: Localización desde la que se descarga el xml
                con la definición de firmas
     key: Clave de cifrado (opcional).
     auth: Un objeto json en formato { "k": "nombre_clave",
           "v": "valor_a_enviar" }

Un Ejemplo de intent
intent://batchsign?fileid=zMX5J64THr4ZJ5lC1nsL&rtservlet=https%3A%2F%2Fwww.rtservlet.org%2Fservlet_afirma%2FRetrieveService&key=64782813#Intent;scheme=afirma;package=es.gob.afirma;end

El procesado del xml y las firmas lo dirige la clase WebBatchSignActivity la
cual tiene un comportamiento similar a WebSignActivity.

Ejemplo del fichero XML con la definición de los documentos a firmar:

<?xml version="1.0" encoding="UTF-8" ?>
<signbatch stoponerror="false" algorithm="SHA256withRSA" concurrenttimeout="30">
	<singlesign Id="7725374e-728d-4a33-9db9-3a4efea4cead">
		<datasource>https://remoteserver/01_dni.pdf</datasource>
		<format>CAdES</format>
		<suboperation>sign</suboperation>
		<extraparams>Zm9ybWF0PUNBZEVTIERldGFjaGVkCm1vZGU9ZXhwbGljaXQKcmVmZXJlbmNlc0RpZ2VzdE1ldGhvZD1odHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYKZmlsdGVycz1ub25leHBpcmVkOnRydWU7aXNzdWVyLnJmYzIyNTQ6KCYoIShDTj1DaWJlckNlbnRybyopKSghKENOPUdvYkNhbkNBKSkoIShPPUdvYmllcm5vIGRlIENhbmFyaWFzKSkoIShPPVBLSSkpKCEoTz1ET19OT1RfVFJVU1QqKSkpO3NpZ25pbmdDZXJ0OnRydWUK</extraparams>
		<signsaver>
			<class>es.gob.afirma.signers.batch.SignSaverHttpPost</class>
			<config>VVJMPWh0dHBzOi8vMTkyLjE2OC4yLjE0Mi8K</config>
		</signsaver>
	</singlesign>
	<singlesign Id="93d1531c-cd32-4c8e-8cc8-1f1cfe66f64a">
		<datasource>https://remoteserver/01_doc02.pdf</datasource>
		<format>CAdES</format>
		<suboperation>sign</suboperation>
		<extraparams>Zm9ybWF0PUNBZEVTIERldGFjaGVkCm1vZGU9ZXhwbGljaXQKcmVmZXJlbmNlc0RpZ2VzdE1ldGhvZD1odHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYKZmlsdGVycz1ub25leHBpcmVkOnRydWU7aXNzdWVyLnJmYzIyNTQ6KCYoIShDTj1DaWJlckNlbnRybyopKSghKENOPUdvYkNhbkNBKSkoIShPPUdvYmllcm5vIGRlIENhbmFyaWFzKSkoIShPPVBLSSkpKCEoTz1ET19OT1RfVFJVU1QqKSkpO3NpZ25pbmdDZXJ0OnRydWUK</extraparams>
		<signsaver>
			<class>es.gob.afirma.signers.batch.SignSaverHttpPost</class>
			<config>VVJMPWh0dHBzOi8vZGVzdGluby9TdG9yYWdlU2VydmljZQpmaWxlSWQ9aFZOb1BQY211amc4VDVva0JUWTcK</config>
		</signsaver>
	</singlesign>
</signbatch>

En el XML hay que destacar el apartado signsaver, la clase encargada del procesamiento es específica para
la firma en android y no puede utilizarse otra devido a las limitaciones de la arquitectura.

Para el almacenamiento de la firma es posible utilizar dos parámetros URL
y fileId:

   El parámetro URL especifica la dirección a la que enviar el resultado de
   la firma, es un parámetro requerido, y el request se envía con los
   parámetros op, v, id y dat tal y como se realiza en las solicitudes de sign,
   cosign y countersign.

   El parámetro fileId es opcional y permite especificar el id con el que se
   envía la firma, en caso de no indicarlo se utiliza el mismo id del campo
   singlesign.

TODO:
 * Mostrar un mensaje informando de la cantidad de ficheros a firmar antes
   de que se inicie el proceso de firma.
 * Permitir al usuario abrir/ver los documentos recibidos antes de firmarlos
 * Admitir documentos en base
 * Implementación de concurrenttimeout

Ver:
 * Definición y limitaciones de intents con Chrome
   https://developer.chrome.com/multidevice/android/intents Definición y limitaciones de intents con Chrome
 * Documentación de clientefirma
   https://github.com/ctt-gob-es/clienteafirma-docs Documentación de clientefirma
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant