A continuación se de detalla cada uno de los servicios de los cuales dispone la API Rest de SIFE
Base_URL: preaplicaciones.aragon.es/sife/services
1.- Servicios
Todos los servicios del API están autenticados. Se requiere un código de aplicación y una contraseña
Se utiliza la autentificación estándar HTTP. La autenticación se envía en la cabecera Authorization
de la petición HTTP concatenando a "BasicX" el codigo de aplicación, el caracter : y la contraseña codificados en Base64
BasicX Base64(account:password)
Por ejemplo,
Authorization: BasicX YWNjb3VudDE6MTExMTExMTA=
1.1.- Digital Signature Service
Conjunto de métodos que permiten realizar operaciones de firma electrónica, firmar, elevar una firma, validar certificado, validar una firma, validar un timestamp, etc. Se trata de un servicio REST que se encuentra disponible en ${Base_URL}/v1/dss/
1.1.1.- Metodo 'extendSignature”
Método que eleva la firma que se le pasa como parámetro a un nivel superior, por ejemplo de CAdES-B a CAdES-T o CAdES-A.
Se debe enviar la firma a elevar, el nivel deseado, y en caso de firmas detached el documento original.
Como ocurre en el caso de la firma, en el caso de que se trate de una firma detached, se puede realizar su elevación a partir del documento original completo, a través del Hash del documento o con su CSV.
En el caso de que realice a través del CSV el contenido del documento almacenado en sifeDocument.setData(originalDocument) y sifeDocument.setDigestValue(originalDocumentHash) será ignorado.
El método 'extendSignature' no modificará los datos almacenados en CCSV en ningún momento, únicamente realizará la elevación y devolverá el resultado.
Petición
Nombre | Tipo | Descripción |
---|---|---|
ExtensionParameters | ExtensionParameters | Parámetros necesarios para la elevación de una firma |
Petición - JSON |
---|
{ "signature":{ $SifeDocumet # Datos de la firma a elevar }, "detachedContent":{ $SifeDocument # Datos del documento al que pertenece la firma }, "signatureLevel": $SignatureLevel # Nivel al que se desea elevar la firma } |
Para invocar correctamente al este método, es necesario tener en cuenta las siguiente consideraciones.
Tanto para el atributo “signature” como para el atributo “detachedContent” en el caso de que se establezca un CSV, se va a intentar cargar la información de la firma y del documento desde el repositorio documental respectivamente. En el caso de que no exista se producirá un error
Para el atributo “signature”, en el caso de no indicar CSV, es obligatorio completar los valores de “data”. Si esto no se hace se devolverá un error.
El atributo detachedContent es opcional, únicamente se completará si se está intentando realizar la elevación de una firma detached. En cuyo caso es necesario completar,
Si se utiliza el documento completo para la elevación, el valor de “data”
Si se utiliza el hash del documento, el valor de “digestValue” y “digestAlgorithm”.
Respuesta
En el caso de que la operación se realice de forma satisfactoria, SIFE devolverá un código 200 y el cuerpo de la respuesta tendrá la siguiente estructura
Nombre | Tipo | Descripción |
---|---|---|
exendedSignature | SifeDocument | Resultado de la elevación |
Respuesta OK - JSON |
---|
{ "data":"MIKGLAYJK" # Firma elevada codificada en base 64 } |
En el caso de que se produzca un error se mandará como código de respuesta un código de error siguiendo el protocolo http y la cuerpo de la respuesta será el siguiente
Respuesta KO - JSON |
---|
{ "error":"El elemento Base64XML debe contener un documento de formato XML" # Información del error } |
No todos los errores están controlados y se manda como respuesta con estructura JSON. A la hora de procesar la respuesta hay que tener esto en cuenta.
Ejemplos de invocación
A continuación se muestran ejemplos de invocación al método, en concreto se muestra el JSON que debe contener el body de la llamada POST.
Elevación CAdES-A documento completo |
---|
{ "signature":{ "data":"PGRzOlNpZ25hdHVyZSB4" # Firma a elevar codificada en base 64 }, "detachedContent":{ "data":"RG9jdW1lbnRvIGRlI" # Documento codificado en base 64 }, "signatureLevel":"CAdES_A" # Nivel al que se quiere elevar la firma } |
Elevación CAdES-A documento completo |
---|
{ "signature":{ "data":"PGRzOlNpZ25hdHVyZSB4bWxucz" # Firma a elevear codificada en base 64 }, "detachedContent":{ "digestValue":"Ca/QShcf4w", # Hash del documento codificado en base 64 "digestAlgorithm":"SHA256" # Algoritmo utilizado el cálculo del Hash }, "signatureLevel":"CAdES_A" # Nivel al que se quiere elevar la firma } |
1.1.2.- Metodo 'validateSignature”
Verifica una firma contra @firma. Se debe enviar la firma a verificar y el documento original si la firma es detached. Este método puede invocarse pasando como parámetro el contenido completo del documento, a través de su hash o indicando su CCSV.
Se devolverá un informe de verificación con el resultado, indicando si la firma es válida, o si la firma es inválida o la razón por la cual no se ha verificado correctamente la firma.
Petición
Nombre | Tipo | Descripción |
---|---|---|
Params | VerificationParameters | Parámetros necesarios para la verificación de la firma |
Petición - JSON |
---|
{ "signature":{ $SifeDocumet # Datos de la firma a validar }, "detachedContent":{ $SifeDocument # Datos del documento al que pertenece la firma }, "signatureLevel": $SignatureLevel # Nivel al que se desea elevar la firma } |
Para invocar correctamente al este método, es necesario tener en cuenta las siguiente consideraciones.
Tanto para el atributo “signature” como para el atributo “detachedContent” en el caso de que se establezca un CSV, se va a intentar cargar la información de la firma y del documento desde el repositorio documental respectivamente. En el caso de que no exista se producirá un error
Para el atributo “signature”, en el caso de no indicar CSV, es obligatorio completar los valores de “data”. Si esto no se hace se devolverá un error.
El atributo detachedContent es opcional, únicamente se completará si se está intentando realizar la validación de una firma detached. En cuyo caso es necesario completar,
Si se utiliza el documento completo para la elevación, el valor de “data”
Si se utiliza el hash del documento, el valor de “digestValue” y “digestAlgorithm”.
Respuesta
En el caso de que la operación se realice de forma satisfactoria, SIFE devolverá un código 200 y el cuerpo de la respuesta tendrá la siguiente estructura
Nombre | Tipo | Descripción |
---|---|---|
result | VerificationReport | Resultado de la verificación |
Respuesta OK - JSON |
---|
{ "validationTime":"2020-05-05T13:19:56Z", "signatures":[ { "indication":"VALID", "errors":[ ], "signingDate":"2020-05-05T07:09:53Z", "signingCertificate":{ "serialNumber":"149600354636033510397093140076022879569", "errors":[ ], "elements":{ "ApellidosResponsable":"ESPAÑOL ESPAÑOL", "OrganizacionEmisora":"Agencia Notarial de Certificacion S.L.U. - CIF B83395988", "segundoApellidoResponsable":"ESPAÑOL", "versionPolitica":"61", "usoCertificado":"digitalSignature", "pais":"ES", "subject":"CN=SUBSCRIPTOR FICTICIO ESPAÑOL ESPAÑOL,serialNumber=00000000T,givenName=SUBSCRIPTOR FICTICIO,SN=ESPAÑOL ESPAÑOL,OU=Certificado Notarial Personal (Autentica),OU=Autorizado ante Notario NOTARIO FICTICIO,C=ES", "primerApellidoResponsable":"ESPAÑOL", "certQualified":"YES", "numeroSerie":"149600354636033510397093140076022879569", "NombreApellidosResponsable":"SUBSCRIPTOR FICTICIO ESPAÑOL ESPAÑOL", "validoHasta":"2022-05-01 dom 12:41:51 +0200", "idPolitica":"MITyC", "validoDesde":"2019-05-02 jue 12:41:51 +0200", "tipoCertificado":"ANCERT PF Personal Autenticación 2010", "certClassification":"ESIG", "email":"no-mail@ancert.com", "clasificacion":"0", "idEmisor":"CN=ANCERT Certificados Notariales Personales V2,O=Agencia Notarial de Certificacion S.L.U. - CIF B83395988,L=Paseo del General Martinez Campos 46 6a planta 28010 Madrid,C=ES", "qscd":"UNKNOWN", "NIFResponsable":"00000000T", "extensionUsoCertificado":"KeyPurposeId 0: TLS Web client authentication\nKeyPurposeId 1: E-mail protection", "nombreResponsable":"SUBSCRIPTOR FICTICIO", "unidadOrganizativa":" OrganizationUnit=Autorizado ante Notario NOTARIO FICTICIO OrganizationUnit=Certificado Notarial Personal (Autentica)", "politica":"1.3.6.1.4.1.18920.1.1.1.2.2" } }, "certificates":[ { "serialNumber":"149600354636033510397093140076022879569", "subjectPrincipal":"CN=SUBSCRIPTOR FICTICIO ESPAÑOL ESPAÑOL,serialNumber=00000000T,givenName=SUBSCRIPTOR FICTICIO,SN=ESPAÑOL ESPAÑOL,OU=Certificado Notarial Personal (Autentica),OU=Autorizado ante Notario NOTARIO FICTICIO,C=ES", "issuerPrincipal":"CN=ANCERT Certificados Notariales Personales V2,O=Agencia Notarial de Certificacion S.L.U. - CIF B83395988,L=Paseo del General Martinez Campos 46 6a planta 28010 Madrid,C=ES", "errors":[ ], "validFrom":"2019-05-02T12:41:51Z", "validTo":"2022-05-01T12:41:51Z", "elements":{ }, "status":"GOOD", "x509Certificate":"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" }, { "serialNumber":"42685627693952406827413922632310396763", "subjectPrincipal":"CN=ANCERT Certificados Notariales Personales V2,O=Agencia Notarial de Certificacion S.L.U. - CIF B83395988,L=Paseo del General Martinez Campos 46 6a planta 28010 Madrid,C=ES", "issuerPrincipal":"CN=ANCERT Certificados Notariales V2,O=Agencia Notarial de Certificacion S.L.U. - CIF B83395988,C=ES", "errors":[ ], "validFrom":"2016-06-21T11:50:59Z", "validTo":"2030-05-25T02:01:00Z", "elements":{ }, "status":"GOOD", "x509Certificate":"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" }, { "serialNumber":"12946140764715500296558376647588125768", "subjectPrincipal":"CN=ANCERT Certificados Notariales V2,O=Agencia Notarial de Certificacion S.L.U. - CIF B83395988,C=ES", "issuerPrincipal":"CN=ANCERT Certificados Notariales V2,O=Agencia Notarial de Certificacion S.L.U. - CIF B83395988,C=ES", "errors":[ { "description":"Error de validación. urn:afirma:dss:1.0:profile:XSS:detail:Certificate:code:ValidStatus no encontrado en el informe respuesta" } ], "validFrom":"2010-05-25T18:56:14Z", "validTo":"2030-05-25T18:56:14Z", "elements":{ }, "status":"UNKNOWN", "x509Certificate":"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" } ], "timestamps":[ ] } ], "indication":"VALID", "errors":[ ], "signatureLevel":"CAdES_BASELINE_B", "signatureFormat":"CAdES" } |
Para obtener más información a cerca de cada uno de los atributos devueltos en la respuesta de la verificación ver el apartado 2.
En el caso de que durante la ejecución de la operación se produzca algún error, SIFE devolverá un código de error siguiendo el protocolo http y el cuerpo de la respuesta tendrá la siguiente estructura
Respuesta KO - JSON |
---|
{"error":"Se requiere que el documento disponga de datos cargados"} |
No todos los errores están controlados y se manda como respuesta con estructura JSON. A la hora de procesar la respuesta hay que tener esto en cuenta
Ejemplos de invocación
A continuación se muestran ejemplos de invocación al método, en concreto se muestra el JSON que debe contener el body de la llamada POST.
Verificación de la firma a partir del documento completo |
---|
{ "signature":{ "data":"PGRzOlNpZ25hdHVyZSB4bWx" # Firma a validar codificada en base 64 }, "detachedContent":{ "data":"RG9jdW1lbnRvIGRlIHBy" # Documento codificado en base 64 }, "signatureFormat":"CAdES" # Formato de la firma } |
Verificación de la firma a partir de CSV |
---|
{ "signature":{ "data":"MIJ3fgYJKoZIh" # Firma a validar codificada en base 64 }, "detachedContent":{ "csv":"CSVTC0LJX84321D01PFI" # CSV del documento a validar (el documento debe encontrarse almacenado Documentum) }, "signatureFormat":"CAdES" # Formato de la firma } |
Verificación de la firma a partir del hash del documento |
---|
{ "signature":{ "data":"MIIclAYJKoZIhvcNAQc" # Firma a validar codificada en base 64 }, "detachedContent":{ "digestValue":"Ca/QShcf4w/CRE" # Hash del documento codificado en base 64 "digestAlgorithm":"SHA512" # Algoritmo utilizado el cálculo del Hash }, "signatureFormat":"CAdES" # Formato de la firma } |
2.- Anexos
2.1.- Objetos comunes
2.1.1.- ExtensionParameters
Nombre | Tipo | Descripción |
---|---|---|
signature | SifeDocument | Firma a elevar |
detachedContent | SifeDocument | Origen de datos correspondiente con la firma en caso de firmas detached |
signatureLevel | SignatureLevel | Nivel deseado para la firma (T,XL, A) |
2.1.2.- SifeDocument
Nombre | Tipo | Descripción |
---|---|---|
digestValue | String | Hash del documento codificado en base 64 |
digestAlgorithm | DigestAlgorithm | Algoritmo de digest utilizado para calcular el hash |
data | String | Documento codificado en base 64 |
mimetype | String | Tipo del documento. Ej: application/pdf, application/xml |
csv | String | Identificador del documento en CCSV |
csvSignatureId | String | Identificador de la firma del documento en CCSV |
sifeIdentifer | String | Identificador interno de SIFE para documentos temporales |
name | String | Nombre del documento |
2.1.3.- VerificationReport
Nombre | Tipo | Descripción |
---|---|---|
validationTime | String | Fecha en la que se ha realizado la validación de la firma Ej: |
signatures | List<SignatureStatus> | Estado de cada una de las firmas que contiene la firma original |
indication | Indication | Resultado global de la validación de la firma |
errors | List<VerificationError> | Errores en la verificación |
signatureLevel | SignatureLevel | Nivel de firma |
signatureFormat | SignatureFormat | Formato de firma |
2.1.4.- SignatureStatus
Nombre | Tipo | Descripción |
---|---|---|
indication | Indication | Resultado global de validación de la firma |
errors | List<VerificationError> | Errores en la verificación |
signingDate | String | Fecha de firma Ej: |
signatureExpirationDate | String | Fecha de caducidad de la firma. Correspondera a la fecha de firma o a la fecha del sello de tiempo si la hay Ej: |
policy | String | Datos de la politica de firma seguida |
signatureLevel | SignatureLevel | Nivel de firma |
signingCertificate | CertificateStatus | Certificado de firma utilizado |
certificates | List<CertificateStatus> | Certificados procesados |
timestamps | List<TimeStampStatus> | Sellos de tiempo de la firma (si los hay) |
2.1.5.- VerificationError
Nombre | Tipo | Descripción |
---|---|---|
code | String | Código del error producido |
description | String | Descripción del error producido |
2.1.6.- CertificateStatus
Nombre | Tipo | Descripción |
---|---|---|
serialNumber | String | Número de serie |
subjectPrincipal | String | Titular |
issuerPrincipal | String | Emisor |
errors | List<VerificationError> | Errores en la verificación |
validFrom | String | Fecha desde la que es válido Ej: |
validTo | String | Fecha hasta la que es válido Ej: |
elements | Map<String, String> | Cada uno de los elementos extraídos del certificado (Vacío para certificados de sello de tiempo |
status | Status | Estado de validación |
x509Certificate | String | Contenido del certificado codificado en base 64 |
2.1.7.- TimestampStatus
Nombre | Tipo | Descripción |
---|---|---|
serialNumber | String | Numero de serie asignado por el prestador al token |
indication | Indication | Resultado global de la validación del sello |
errors | List<VerificationError> | Errores en la verificación |
type | TimeStampType | Tipo de sello, de firma o de archivo |
creationDate | String | Fecha del sellado de tiempo Ej: |
tsaCertificate | CertificateStatus | Estado del certificado |
timestampTokenData | String | Datos del sellado de tiempo codificados en base 64 |
timestampToken | TimestampToken | Token de sello |
2.1.8.- TimestampToken
Nombre | Tipo | Descripción |
---|---|---|
serialNumber | String | Identificador del sello de tiempo |
nonce | String | |
expires | String | Fecha de espiración Ej: |
generationDate | String | Fecha de generación Ej: |
encoded | String | Contenido del token codificado en base 64 |
hash | String | Hash del mensaje codificado en base 64 |
content | String | Contenido sobre el que se han realizado las acciones codificado en base 64 |
tsaName | String | |
tsaPolicyOID | String | |
certificates | List<String> | Certificados utilizados codificados en base 64 |
2.2.- Tipos enumerados
2.2.1.- SignatureLevel
Valor |
---|
XAdES_C |
XAdES_X |
XAdES_XL |
XAdES_A |
XAdES_BASELINE_LTA |
XAdES_BASELINE_LT |
XAdES_BASELINE_T |
XAdES_BASELINE_B |
CAdES_BASELINE_LTA |
CAdES_BASELINE_LT |
CAdES_BASELINE_T |
CAdES_BASELINE_B |
CAdES_C |
CAdES_XL |
CAdES_A |
PAdES_BASELINE_LTA |
PAdES_BASELINE_LT |
PAdES_BASELINE_T |
PAdES_BASELINE_B |
PAdES_LTV |
ASiC_S_BASELINE_LTA |
ASiC_S_BASELINE_LT |
ASiC_S_BASELINE_T |
ASiC_S_BASELINE_B |
ASiC_E_BASELINE_LTA |
ASiC_E_BASELINE_LT |
ASiC_E_BASELINE_T |
ASiC_E_BASELINE_B |
WSS |
CMS_CMS |
2.2.2.- DigestAlgorithm
Valor |
---|
SHA1 |
SHA224 |
SHA256 |
SHA384 |
SHA512 |
MD2 |
MD5 |
2.2.3.- Indication
Valor |
---|
VALID |
INVALID |
2.2.4.- SignatureFormat
Valor |
---|
XAdES |
CAdES |
PAdES |
ASiC_S |
ASiC_E |
WSS |
CMS |
2.2.5.- Status
Nombre | Valor |
---|---|
GOOD | GOOD |
REVOKED | REVOKED |
EXPIRED | EXPIRED |
UNKNOWN | UNKNOWN |
NOT_CHECKED | NOT_CHECKED |
2.2.6.- TimestampType
Nombre | Valor |
---|---|
SIGNATURE_TIMESTAMP | SIGNATURE_TIMESTAMP |
ARCHIVE_TIMESTAMP | ARCHIVE_TIMESTAMP |
2.1.- Errores generales al consumir la API
Causa | Código | Mensaje |
---|---|---|
Aplicación no encontrada en SIFE | 401 | User account not found |
Aplicación no encontrada en PAU | 401 | Ha ocurrido un error al invocar a la plataforma de autorizacion de usuarios |
La ip no está en la lista de ip's permitidas | 403 | El servicio no ha sido autorizado : La ip no está en la lista de ip's permitidas |
Aplicación no autorizada para el uso de un método en particular | 403 | El servicio no ha sido autorizado : No se ha encontrado una relación entre las dos aplicaciones |
Operación que utiliza un sello de órgano no permitido | 400 | STAMP_NOT_AUTHORIZED |