⚙️
GBC
  • Global Bridge Connections
  • Glosario
  • Módulos
  • Entornos de la API
  • Solicitud de API Keys
  • Seguridad
    • Solicitudes Firmadas
    • Protección de datos sensibles
  • Comienza de forma sencilla
  • Reference
    • Estatus de entidades
    • Códigos de Error
    • API Reference
      • Authentications
      • Security
      • Merchants
      • Clients
      • Cards
      • Client-cards
  • Core Api
    • Authentication
Powered by GitBook
On this page
  • Headers
  • Generación del signature (firma)
  • Ejemplo del cálculo de firma (Nodejs)
  1. Seguridad

Solicitudes Firmadas

Información relacionada con la forma de comunicación segura en la API

En GBC, hemos implementado una capa de seguridad de peticiones a nuestros endpoints públicos y privados, la cual consiste en generar una firma única por cada petición enviada a los ambientes de GBC. A continuación encontrarás el paso a paso para lograr firmar tus solicitudes a nuestras API.

Headers

En las cabeceras de cada petición, GBC solicitará los siguientes parámetros obligatorios:

Campo
Tipo de dato
Detalle

authorization-token

string

Token que se genera genera luego del Login, se debe enviar con el siguiente formato:

"Bearer JHgytHG67687JHG..."

signature

string

Firma generada con los valores del payload y encriptada con la secret key del cliente B2B. Este resultado (firma) se envía en los headers de cada petición junto con el authorization-token.

Generación del signature (firma)

A continuación, los pasos para la generación de la firma:

  1. Tener api-public-key y api-secret-key.

  2. Agregar el campo generado en el momento timestamp a los datos (objeto) a firmar.

  3. Ordenar los campos (objeto) que se quieren firmar de forma alfabética ascendente.

  4. Pasar el objeto a tipo texto.

  5. Ejecutar la función SHA256, donde la llave de la firma seria con el valor de la (api-secret-key)

  6. El dato resultante de este cálculo sería lo que colocaría en el campo signature en los Headers

Ejemplo del cálculo de firma (Nodejs)

Objeto a firmar

const params = {
        alias,
        timestamp,
}

Función de firma

// Liberias Crypto
const CryptoJS = require("crypto-js");
const queryString = require('query-string');
const axios = require('axios');

// Claves secretas
const SECRET_KEY = 'tu-secret-key-uuid';
const PUBLIC_KEY = 'tu-public-key-uuid';
const URL = 'https://stgapicards.gbc.pe/api-hub/v1/merchants/me';

// Función de firma de datos
const signatureRequest = (params, secretKey) => {
    params = Object.keys(params)
        .sort()
        .reduce((acc, key) => {
            acc[key] = params[key];
            return acc;
        }, {});
    const query = queryString.stringify(params);
    return CryptoJS.SHA256(query, { secretKey }).toString();
}

// Ejecución de la firma en una función de ejemplo

const getUserData = (alias) =>
{
    const timestamp = Math.floor(Date.now());

    const params = {
        alias,
        timestamp,
    }

     const signatureResponse = signatureRequest(params, SECRET_KEY);
    
     axios.post(URL, params, {
        headers: {
            'Api-Public-Key': PUBLIC_KEY,
            'Signature': signatureResponse
        }
     })
     .then( (response) => console.log('RESPONSE:::', response.data ))
     .catch( (error) => console.log('ERROR:::', error.response.data));
}
PreviousSeguridadNextProtección de datos sensibles

Last updated 2 years ago