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 timestamp
e uma ou mais assinaturas. O timestamp
é prefixado por t=
e cada assinatura é prefixada por um esquema. Os esquemas começam com v
seguido 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 t
prefixo corresponde ao timestamp e o v1
corresponde à 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
string
formato)
Calcule HMAC
com a SHA256
funçã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?