API Autenticación
¿Cómo se autentica nuestra API?
Todas la peticiones deben ir firmadas, permitiendo identificar al emisor y evitar ataques de suplantación de identidad, para ello se entraga un identificador público, una clave secreta y un identificador de recurso para interactuar con el servidor.
- Key: Es el identificador público del emisor de la petición.
- Secret: Es la clave secreta que permite firmar las peticiones y nunca viaja en las mismas.
- Resource: Es un identificador asociado a la configuración del emisor que permite, con un único par identificador/clave secreta, integrar todas las soluciones.
Estos tres parámetros deberían ser configurables en la integración del cliente para que puedan ser modificados.
Estos parámetros, especialmente el secret, podrán variar entre entornos de integración. Es decir, en producción tendrán valores distintos y por ese motivo es importante que sean configurables en su aplicación.
La secret la utilizaremos para firmar digitalmente las peticiones del API y por tanto nunca viajará en las solicitudes. Es importante que almacene de forma segura este valor y que nunca lo comparta con nadie además de impedir que sea un valor público.
Para el caso de las peticiones que contienen un cuerpo de petición (i.e. POST, DELETE, PUT, …) la firma consistirá en realizar un hash (hmac) en hexadecimal, del cuerpo de la petición con cualquiera de los algoritmos soportados por nuestro sistema: sha256 o sha512, y la clave secreta proporcionada por Sipay e incluirla en la cabecera Content-Signature.
Ejemplos
import requests
import json
import hashlib
import hmac
body = {
"key": "589365da65c48cff87d0874a",
"mode": "sha256",
"resource": "359ef8ce5c5f4003b71692e446908c27",
"nonce": "1234567890",
"payload": {
"param1": "value1",
"param2": "value2"
}
}
secret = b'api-secret'
sign = hmac.new(secret, json.dumps(body).encode('utf-8'), hashlib.sha256).hexdigest()
url = 'https://dummy.es/'
response = requests(url, data=body, headers={'Content-signature': sign})
¿Qué entornos tenemos?
Nuestra integración consisten en dos pasos. Primero realizará la implementación técnica en el entorno de pruebas o más conocido como sandbox. Después de realizar las pruebas necesarias sobre el entorno de sandbox podrá pasar al entorno de producción o más conocido como live.
Entorno Sandbox | URL |
---|---|
URL API | https://sandbox.sipay.es/ |
Entorno Producción | URL |
---|---|
URL API | https://live.sipay.es/ |