API: Métodos relacionados con la firma desatendida con certificado
Última actualización: 13 noviembre 2024
El proceso de firma desatendida en Viafirma Fortress, constará de los procesos de:
- Autenticación del cliente
- Solicitud de firma
- Ejecución de la firma
- Obtención del documento/s firmado/s
En los siguientes apartados describiremos los métodos disponibles en Viafirma Fortress, asociados a las operaciones de firma:
Nota: Para acceder a estos métodos es necesario tener un token de acceso (access_token
) obtenido mediante una petición de autenticación y autorización con un scope
de tipo client
y un grant_type
de tipo client_credentials
, para lo que hay que seguir los pasos indicados en esta sección de la documentación.
Solicitud de firma desatendida
Uso del servicio
Método: POST
URL: {viafirma_fortress_url}/api/v1/signature
Donde:
viafirma_fortress_url
: URL base de la implementación de Viafirma Fortress, por ejemplo https://sandbox.viafirma.com/fortress o https://fortress.viafirma.com/fortress
Además, en la cabecera HTTP de la petición POST
debe incluirse el token de acceso (access_token
) de la siguiente forma:
Authorization: Bearer {access_token}
Ejemplo:
Método: POST
URL: {viafirma_fortress_url}/api/v1/signature
Header de la petición: Authorization: Bearer 0b79bab50daca910b000d4f1a2b675d604257e42
Parámetros del servicio
Este servicio recibe por parámetros la configuración de la firma empleada por cada documento a firmar, donde se indica, entre otras cosas, el tipo de firma que se quiere realizar, el documento a firmar…
Los parámetros que se reciben (en formato application/json
) tienen la siguiente forma:
{
"certificateCode": "b8a25e04ab864583bb5ea8d02883e832",
"signatureConfigurations": [
{
"ref": "#1",
"document": {
"bytesB64": "JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQ...",
"name": "contrato.pdf"
},
"signatureType": "PADES_B",
"signatureAlgorithm": "RSA_SHA256",
"packaging": "ENVELOPED",
"padesConfiguration": {
"stamper": {
"csvPath": "http://localhost:7080/fortress/v#",
"logoB64": "iVBORw0KGgoAAAANSUhEUgAAAWYAAABsCAYAAABZyhj...",
"page": 1,
"type": "QR_BARCODE128",
"xAxis": 80,
"yAxis": 700
}
}
}
]
}
Nota: Los detalles de los parámetros padesConfiguration
, xadesConfiguration
, tsa
y policy
se muestran más adelante.
Donde:
Parámetro | Tipo | Descripción |
---|---|---|
certificateCode | string | Código del certificado a emplear en la firma, se debe consultar en la pestaña Certificados del apartado Configuración del detalle del sistema cliente o grupo donde se aloje el certificado |
certificatePassword | string | Contiene la password del certificado, este campo solamente está permitido para la firma desatendida. |
async | string | Si se establece con el valor true la llamada al servicio de ejecución de firma se realiza de forma asíncrona. |
callbackUrl | string | Si se informa una URL y la firma se realiza de forma asíncrona, al finalizar la firma Fortress realiza una petición POST a dicha URL con el estado final de ejecución. |
signatureConfigurations/document/name | string | Nombre del documento a firmar |
signatureConfigurations/document/bytesB64 | string | Documento a firmar, codificado en Base64 |
signatureConfigurations/document/url | string | URL del documento a firmar |
signatureConfigurations/signatureType | string | Tipo de firma. Valores disponibles: - CADES_B - CADES_T - CADES_LT - CADES_LTA - PADES_B - PADES_T - PADES_LT - PADES_LTA - XADES_B - XADES_T - XADES_LT - XADES_LTA - PKCS1 |
signatureConfigurations/signatureAlgorithm | string | Algoritmo que se usará para cifrar la firma. Valores disponibles: - RSA_SHA1 - RSA_SHA224 - RSA_SHA256 - RSA_SHA384 - RSA_SHA512 |
signatureConfigurations/packaging | string | Envoltura de la firma. Valores disponibles: - ENVELOPED - ENVELOPING - DETACHED |
signatureConfigurations/reason | string | OPCIONAL, motivo de la firma |
signatureConfigurations/location | string | OPCIONAL, localización de la firma |
signatureConfigurations/ref | string | Si se informa, se devolverá el mismo valor en el resultado de la firma. |
Configuración PAdES
Esta configuración solo se aplica para las firmas cuyo signatureType
es de tipo PAdES (PAdES B, PAdES T, PAdES LT, PAdES LTA).
"padesConfiguration": {
"stamper": { }
}
El objeto stamper es opcional, y sirve para definir un sello visual asociado a la firma PAdES.
{
"stamper": {
"csvPath": "https://fortress.viafirma.com/fortress/v#",
"imageB64": "JVBERi0xLjMKJcTl8uXlRU9GC...",
"logoB64": "JVBERi0xLjMKJcTl8uXlRU9GC...",
"page": 1,
"rotation": "ROTATE_90",
"textLine1": "Sample line 1",
"textLine2": "Sample line 2",
"textLine3": "Sample line 3",
"type": "QR_BARCODE128",
"xAxis": 100,
"yAxis": 100,
"timeZoneId": "America/Santo_Domingo"
}
}
Parámetro | Tipo | Descripción |
---|---|---|
stamper/csvPath | string | URL de verificación de la firma |
stamper/xAxis | int | Posición (en el eje X) del sello de firma |
stamper/yAxis | int | Posición (en el eje Y) del sello de firma |
stamper/imageB64 | string | Imagen de fondo del sello de firma |
stamper/logoB64 | string | Logo del sello de firma (se pintará en la parte inferior derecha del sello) |
stamper/page | int | Página donde se pintará el sello. Se puede usar el valor -1 para indicar la última página o el valor 0 para pintar el sello en todas las páginas del documento |
stamper/rotation | string | Rotación del sello. Si se informa, el sello rotará los grados indicados. Valores posibles: - ROTATE_90 - ROTATE_270 |
stamper/textLine1 | string | Primera linea textual a pintar en el contenido del sello de firma |
stamper/textLine2 | string | Segunda linea textual a pintar en el contenido del sello de firma |
stamper/textLine3 | string | Tercera linea textual a pintar en el contenido del sello de firma |
stamper/type | string | Tipo de sello. Valores disponibles: - PDF417 - QR_BARCODE128 - QR - BARCODE128 - IMAGE - TEXT |
stamper/timeZoneId | string | String que se corresponderá con la lista estándar de zonas horarias. |
Dependiendo del type
elegido, el sello tendrá unas dimensiones preestablecidas (en píxeles):
PDF417
: 300x130QR_BARCODE128
: 600x100QR
: 450x50BARCODE128
: 550x70IMAGE
: Mantiene las dimensiones de la imagen especificada enimageB64
TEXT
: 400x50
Si en llamada a la API NO viene informado el valor timeZoneId
aplicaremos el siguiente criterio:
- En caso de firma desatendida, si el Sistema Cliente pertenece a algún grupo que lo tenga informado, aplicamos el del primer grupo que lo tenga informado, si no aplicamos el configurado por defecto en el sistema.
Configuración XAdES
Esta configuración solo se aplica para las firmas cuyo signatureType
es de tipo XAdES (XAdES B, XAdES T, XAdES LT, XAdES LTA)
{
"signedInfoCanonicalizationMethod": "http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
"signedPropertiesCanonicalizationMethod": "http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
"xPathLocationString": "//book[@id='bk101-1']",
"claimedSignerRoles": [
"role1",
"role2"
],
"transformAlgorithms": [
"http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
],
"dssReferenceUri": "http://dsa-reference.example.com/"
}
Donde:
Parámetro | Tipo | Descripción |
---|---|---|
signedInfoCanonicalizationMethod | string | Método de canonización del nodo signedInfo |
signedPropertiesCanonicalizationMethod | string | Método de canonización del nodo signedProperties |
xPathLocationString | string | Selector del nodo bajo el que se insertará la firma, en formato XPath |
claimedSignerRoles | array | Roles del firmante |
transformAlgorithms | array | Algoritmos de transformación para los nodos. Posibles valores: - "http://www.w3.org/TR/2001/REC-xml-c14n-20010315" - "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments" - "http://www.w3.org/2001/10/xml-exc-c14n#" - "http://www.w3.org/2001/10/xml-exc-c14n#WithComments" - "http://www.w3.org/2006/12/xml-c14n11" - "http://www.w3.org/2006/12/xml-c14n11#WithComments" - "http://santuario.apache.org/c14n/physical" |
dssReferenceUri | string | Identificador del nodo a firmar |
Configuración TSA
Para los tipos de firma que incluyan sellado de tiempo, se debe informar la configuración de la TSA.
{
"url": "http://tsa.example.com/",
"user": "tsa_user",
"password": "tsa_pass",
"type": "USER",
"certificateCode": "tsa_certificate_code"
}
Parámetro | Tipo | Descripción |
---|---|---|
type | string | Tipo de TSA. Si requiere autenticación con usuario y password, usaremos el valor USER , si requiere autenticación con certificado CERTIFICATE , si requiere autenticación con certificado por TSL CERTIFICATE_TLS , si no, el valor URL |
user | string | Usuario para la autenticación en la TSA (solo para type con valor USER ) |
password | string | Contraseña para la autenticación en la TSA (para los type con valor USER o CERTIFICATE_TLS ) |
url | string | URL de de la TSA |
certificateCode | string | Código del certificado para la autenticación en la TSA (para los type con valor CERTIFICATE o CERTIFICATE_TLS ) |
Configuración de políticas
Para que la firma tenga una política y se la pueda considerar de tipo EPES, podemos definir los valores de la misma con esta configuración.
{
"id": "102039485-10283757-102837575",
"description": "Sample policy",
"digestAlgorithm": "SHA256",
"digestValueB64": "JVBERi0xLjMKJcTl8uXlRU9GC",
"url" : "https://sample/lorem_ipsum_dolor_sit_amet.pdf",
"contentHintsDescription": "Lorem ipsum dolor sit amet",
"contentHintsType": "Lorem ipsum dolor sit amet"
}
Parámetro | Tipo | Descripción |
---|---|---|
id | string | Identificador de la política |
description | string | Descripción de la política |
digestAlgorithm | string | Algoritmo de cifrado. Posibles valores: - SHA1 - SHA224 - SHA256 - SHA384 - SHA512 - RIPEMD160 - MD2 - MD5 |
digestValueB64 | string | Valor (codificado en Base64) |
url | string | El SpURI (calificador de política de firma). El calificador spURI contendrá un valor de URL donde se puede obtener una copia del documento de política de firma. |
contentHintsDescription | string | Descripción de la ayuda |
contentHintsType | string | Tipo de ayuda |
Respuesta del servicio
La respuesta de este servicio vendrá dada (en formato application/json
) de la siguiente forma:
{
"authCode": "1aeb979ddcf247e9ad46ee73e19a326d",
"exeCode": "f116305e7f7c44f3a29385028c5374ba"
}
Donde:
Parámetro | Tipo | Descripción |
---|---|---|
authCode | string | Código de autorización |
exeCode | string | Código de ejecución |
Errores del servicio
Los errores devueltos por el servicio (devueltos en formato application/json
) tienen el siguiente aspecto:
{
"error": "error_code",
"error_description": "error_description"
}
Donde:
Parámetro | Tipo | Descripción |
---|---|---|
error | string | Código del error |
error_description | string | Descripción del error |
Posibles errores:
Código de error | Error |
---|---|
invalid_request | Petición incorrecta. Alguno de los parámetros de entrada no es correcto. (HTTP Status: 400) |
invalid_token | El access_token utilizado no es correcto (HTTP Status: 401) |
Ejecución de la firma
Con este método firmaremos los documentos asociados a la operación de preparación de firma.
Uso del servicio
Método: POST
URL: {viafirma_fortress_url}/api/v1/signature/{executionCode}/execute
Además, en la cabecera HTTP de la petición POST
debe incluirse el token de acceso (access_token
) de la siguiente forma:
Authorization: Bearer {access_token}
Donde:
viafirma_fortress_url
: URL base de la implementación de Viafirma Fortress, por ejemplo https://sandbox.viafirma.com/fortress o https://fortress.viafirma.com/fortressexecutionCode
: Código de ejecución que devolvió el método signature
Ejemplo:
Método: POST
URL: {viafirma_fortress_url}/api/v1/signature/f116305e7f7c44f3a29385028c5374ba/execute
Header de la petición: Authorization: Bearer 0b79bab50daca910b000d4f1a2b675d604257e42
Parámetros del servicio
Este servicio recibe por parámetros el código de ejecución executionCode, resultante del procedimiento de preparación de la firma, con dicho código obtendremos la información asociada a cada operación de firma.
Se debe proporcionar(en formato application/json
) vacío:
{
}
Respuesta del servicio
La respuesta de este servicio vendrá dada (en formato application/json
) de la siguiente forma:
[
{
"bytesB64": "a910b000d4f1a2b...",
"signatureCode": "e2470412-33cc-467a-b357-880fe621920f",
"mimeType": "application/pdf",
"ref": "#1"
},
...
]
Donde:
Parámetro | Tipo | Descripción |
---|---|---|
bytesB64 | string | Documento firmado, codificado en Base64 |
signatureCode | string | Identificador de firma |
mimeType | string | MIME type del documento firmado |
ref | string | Se devuelve el mismo valor si fue informado en la solicitud de firma |
Errores del servicio
Los errores devueltos por el servicio (devueltos en formato application/json
) tienen el siguiente aspecto:
{
"error": "error_code",
"error_description": "error_description"
}
Donde:
Parámetro | Tipo | Descripción |
---|---|---|
error | string | Código del error |
error_description | string | Descripción del error |
Posibles errores:
Código de error | Error |
---|---|
invalid_request | Petición incorrecta. Alguno de los parámetros de entrada no es correcto. (HTTP Status: 400) |
invalid_token | El access_token utilizado no es correcto (HTTP Status: 401) |
certificate_not_found | El certificado con el que se desea firmar no es correcto o no está activo (HTTP Status: 404) |
invalid_certificate_password | La password del certificado es incorrecta (HTTP Status: 401) |
locked_certificate | El certificado se encuentra bloqueado (HTTP Status: 401) |
signature_error | Error durante la firma (HTTP Status: 500) |
Descarga de documento firmado
Con este método podemos descargar un documento firmado usando un identificador de firma.
Uso del servicio
Método: GET
URL: {viafirma_fortress_url}/api/v1/signature/download/{signature_code}
Además, en la cabecera HTTP de la petición GET
debe incluirse el token de acceso (access_token
) de la siguiente forma:
Authorization: Bearer {access_token}
Donde:
viafirma_fortress_url
: URL base de la implementación de Viafirma Fortress, por ejemplo https://sandbox.viafirma.com/fortress o https://fortress.viafirma.com/fortresssignature_code
: Código de la firma de la que se desea descargar el documento
Ejemplo:
Método: GET
URL: {viafirma_fortress_url}/api/v1/signature/download/C0XJ-XOAK-OF1O-TYJ7-S164-3197-3571-05
Respuesta del servicio
La respuesta de este servicio vendrá dada (en formato application/octet-stream
)
Errores del servicio
Los errores devueltos por el servicio (devueltos en formato application/json
) tienen el siguiente aspecto:
{
"error": "error_code",
"error_description": "error_description"
}
Donde:
Parámetro | Tipo | Descripción |
---|---|---|
error | string | Código del error |
error_description | string | Descripción del error |
Posibles errores:
Código de error | Error |
---|---|
document_not_found | No se ha encontrado ningún documento para el ID de firma provisto (HTTP Status: 404) |
results matching ""
No results matching ""