Crafy

Account

Cargando...

Autenticación (API)

Documentación para desarrolladores


¿Cómo funciona la autenticación en la API de Crafy Account?

La autenticación en la API de Crafy Account se maneja mediante el envío de credenciales en las consultas, las cuales son utilizadas para iniciar sesión en nuestros servidores.
Dependiendo del método de la API que sea consultado se requerirán ciertas credenciales de acceso.

¿Qué tipos de credenciales existen?

() Existen tres clases y dos tipos de credenciales:

Tipos de credenciales

Clases de credenciales

Nunca reveles las credenciales a los usuarios finales y no las compartas con nadie

Envío de credenciales a la API de Crafy Account

Dependiendo del método de la API que consultes tendrás que enviar uno o más Tipos de credenciales.

Credenciales de un Cliente de inicio de sesión

GET parameters

POST parameters

Credenciales de un Sesión de usuario

POST parameters

Time Access Token

Un Time Access Token es un token hash basado en tiempo que se genera con la Time Access Token Password (o TATP por sus siglas) y cambia cada 30 segundos.
Solo los servidores de Crafy Account y tú conocen la Time Access Token Password, por lo que son los únicos capaces de generar el Time Access Token correspondiente al período de tiempo actual.
Cada vez que envíes un Time Access Token los servidores de Crafy Account corroborarán que sea correcto para permitir el acceso.

Nunca reveles un Time Access Token ni un Time Access Token Password a nadie

¿Cómo envío el Time Access Token en una consulta API?

Debes enviar el Time Access Token actual en el campo "api_credentials_tat" por el método POST de la consulta.

Procedimiento de generación del Time Access Token actual
  1. Obtener la marca de tiempo UNIX actual en segundos.
  2. Dividir la marca de tiempo UNIX entre el intervalo, que es igual a 30.
  3. Redondear el resultado y multiplicarlo por el intervalo, que es igual a 30.
  4. Crear una cadena de texto concatenando estos tres valores: tu TATP + "+" + el número obtenido en el punto anterior.
  5. Codificar la cadena de texto resultante en sha256.
  6. El hash resultante es tu TAT actual.
Ejemplos de generación de Time Access Token

Pseudocódigo - Generar el TAT actual

interval = 30 time_access_token_password = '000000-wWEjGo-000000-drVbAf-000000-RLmtWV' curr_time = getUnixTimeInSeconds() multiplier = round(curr_time / interval) mult_time = multiplier * interval decoded_tat = time_access_token_password + '+' + mult_time current_tat = sha256(decoded_tat)

PHP - Clase principal

class TimeAccessToken { // Time Access Token (TAT) public $interval = 30; public $password; function __construct($interval, $password){ if ($interval > 0 AND !empty($password)) { $this->interval = $interval; $this->password = $password; return true; } else { throw new Exception('TimeAccessToken ERROR: $interval must be higher than zero and $password must be not empty.'); return false; } } public function getToken($regression=0){ $curr_time = time(); $multiplier = round($curr_time / $this->interval); $mult_time = $multiplier * $this->interval; $mult_time = $mult_time - ($regression * $this->interval); $decoded_tat = $this->password . '+' . $mult_time; $hash = hash('sha256', $decoded_tat); return $hash; } public function verifyToken($token, $allowed_regressions=0){ $result = false; for ($i=0; $i <= $allowed_regressions; $i++) { $iToken = $this->getToken($i); if ($iToken === $token) { $result = true; continue; } } return $result; } }

PHP - Generar el TAT actual

$interval = 30; $password = '000000-wWEjGo-000000-drVbAf-000000-RLmtWV'; $TATClass = new TimeAccessToken($interval, $password); $current_tat = $TATClass->getToken();

JavaScript - Generar el TAT actual

No reveles un Time Access Token ni un Time Access Token Password en el lado del cliente

async function generateTAT(interval, password) { var curr_time = Math.floor(Date.now() / 1000); var multiplier = Math.round(curr_time / interval); var mult_time = multiplier * interval; var decoded_tat = password + '+' + mult_time; const encoder = new TextEncoder(); const data = encoder.encode(decoded_tat); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join(''); return hashHex; } var interval = 30; var password = '000000-wWEjGo-000000-drVbAf-000000-RLmtWV'; var current_tat = await generateTAT(interval, password);


Volver atrás