Eventos de Assinatura

Cada notificação que enviamos para seu endpoint é assinada. Fazemos isso incluindo um cabeçalho nomeado "Jump-Signature"em cada evento que enviamos. Isso permite que você verifique e garanta que o evento foi enviado pela Jump e não por um terceiro.

O "Jump-Signature"cabeçalho contém a timestampe uma ou mais assinaturas. O timestampé prefixado por t=e cada assinatura é prefixada por um esquema. Os esquemas começam com vseguido por um integer. Atualmente, há apenas um esquema de assinatura que é v1.

Exemplo do Header Jump-Signature:

Jump-Signature: t=1681235417000,v1=b9ffafcd16416bd11e36f877c2d7ccc71633d174f8245abc49fc2aef7e6633c8

As assinaturas são geradas usando um código de autenticação baseado em mensagem hash (HMAC)com SHA-256. Para evitar ataques de downgrade, você deve ignorar todos os esquemas não v1.


Como validar a assinatura

Etapa 1: Extraia o carimbo de data/hora e a assinatura do cabeçalho

Divida o cabeçalho usando o caractere como separador para obter a lista de elementos. Uma vez feito isso, faça outra divisão usando o =caractere como separador, para obter o prefixo e o valor.

O valor obtido do tprefixo corresponde ao timestamp e o v1corresponde à assinatura. Você pode descartar outros valores.

Etapa 2: Prepare a string para comparar assinaturas

Você deve concatenar essas informações:

  • O carimbo de data/hora (como string)

  • O personagem.

  • A carga útil JSON (corpo da solicitação, no stringformato)

Calcule HMACcom a SHA256função hash. Use o segredo (veja qual é o seu segredo clicando aqui )

Exemplo em PHP

<?php

// This secret is not the secret of the authentication token, it is the UID
$secret = 'my-secret';

// This is the "t" value received on JumpPagamentos-Signature header
$timestamp = 1681235417000;

$requestPayload = [
    'callback' => true,
    'value' => 'value-field'
];

$jsonPayload = json_encode($requestPayload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);

$paramsSignature = "{$timestamp}.{$jsonPayload}";

echo hash_hmac('sha256', $paramsSignature, $secret);

// Output: b9ffafcd16416bd11e36f877c2d7ccc71633d174f8245abc49fc2aef7e6633c8

Etapa 3: Compare as assinaturas

Compare a assinatura enviada pela Jump no Cabeçalho com a assinatura que você gerou na Etapa 2 .

Exemplo em PHP

<?php

// Comparing Signatures
// Example Header of the request sent by Jump:
$headers = [
    'Jump-Signature' => 't=1681235417000,v1=b9ffafcd16416bd11e36f877c2d7ccc71633d174f8245abc49fc2aef7e6633c8'
];

// Extract the value of 't' from Header 'Jump-Signature'
// '1681235417000'
$timestamp = explode("=", explode(",", $headers['Jump-Signature'])[0])[1];

// Extract the value of 'v1' from Header 'Jump-Signature'
// 'b9ffafcd16416bd11e36f877c2d7ccc71633d174f8245abc49fc2aef7e6633c8'
$signature = explode("=", explode(",", $headers['Jump-Signature'])[1])[1];

// The Signature you generated in Step 2 must be equal to the value of the "$signature" variable.
// Must return 1 (true)
echo ('yourSignature' === $signature);

Atualizado

Isto foi útil?