El cifrado de parámetros es un método extra de seguridad, el cuál permite cifrar las credenciales de los usuarios mediante una llave pública vinculada a la API KEY.
Tipos
Actualmente el API soporta dos tipos de “padding”:
- oaep
- pkcs1
Parámetros
Para poder enviar el valor cifrado de un parámetro hay que agregar el sufijo /rsa-oaep o /rsa-pkcs1 a cada uno de los parámetros que se desea proteger, según sea el caso.
Si normalmente enviamos los parámetros de la siguiente manera:
var payload = {
"id_site": "56cf5728784806f72b8b4568",
"username": "test",
"password": "mypassword"
}
Para poder enviarlo cifrado se le tiene que agregar un sufijo al parámetro original, tomando el ejemplo anterior quedaría de la siguiente manera:
var payload = {
"id_site": "56cf5728784806f72b8b4568",
"username": "test",
"password/rsa-pkcs1": "L7TnJadaitE+RfFTsDr6G4VtEG..."
};
Transporte
Para poder transportar un valor cifrado hay que encapsular su valor en base64:
var password = "mypassword";
password = myEncryptFunction(password);
password = base64_encode(password);
Multiples parámetros
Se pueden cifrar uno o más parámetros en cada petición, aunque para reducir el tamaño de la petición se recomienda usar un parámetro especial payload/rsa-oaep o payload/rsa-pcks1 en donde su contenido es una representación JSON en un string con todos los parámetros adentro.
Este sería un ejemplo no optimizado:
var payload = {
"id_site": "56cf5728784806f72b8b4568",
"username/rsa-oaep": "X9e21uGBN3Z10kx3EP151GFQd9...",
"password/rsa-pkcs1": "L7TnJadaitE+RfFTsDr6G4VtEG..."
};
Este sería un optimizado:
var credential = {
"username": "test",
"password": "mypassword"
};
credential = JSON.stringify(credential);
credential = myEncryptFunction(credential);
credential = base64_encode(credential);
var payload = {
“id_site”: “56cf5728784806f72b8b4568”,
“payload/rsa-pkcs1”: credential
};
Ejemplos:
Ejemplo para cifrar via linea de comandos (Linux o macOS)
echo "mypassword" | openssl rsautl -encrypt -pkcs -pubin -inkey production_pub.key | openssl base64
Ejemplo cURL de una petición al API
curl -d '{"api_key":"{{ valor de api key}}","password\/rsa-pkcs1":"{{ base64 url safe}}"}' -H 'Content-Type: application/json' -k https://sync.paybook.com/v1/send_values
Ejemplo de una petición al API
Peticion:
Respuesta:
Nota: El endpoint /send_values es un endpoint que nos ayudará a probar que este funcionando correctamente, una vez que se valide que funciona el cifrado se debe de enviar al endpoint de /credentials para seguir el flujo de creación de credenciales.