Saltar al contenido

¡Transforma tus conexiones en dinero para el final del año con nuestro nuevo Programa de Indicación de Clientes! Descubre más

Esta documentación es para la versión 3.3 y anteriores de Vinyl, el nombre anterior de App Builder. Acceda a la documentación más reciente aquí.

Ejemplo de Secuencia de Comandos: Generar HMAC HASH Usando un Token Privado

Este ejemplo ilustra el uso de un complemento de C# con una API REST para autenticación. Este ejemplo específico requirió generar un HMAC HASH usando un token privado, una referencia única por solicitud y una marca de tiempo de época.

Para uso de comunicación, se proporciona un 'token privado' (y una referencia de la organización). Mantenga este token en secreto.

Cada solicitud contendrá 3 encabezados (adicionales):

  • Authentication-Reference: (Cadena) - Una referencia, debe ser única por solicitud. El formato no está especificado.
  • Authentication-epoch: (Número): una marca de tiempo de la época de Unix en número de segundos desde el 1/1/1970.
  • Authentication-Signature: (Cadena): la combinación firmada de Referencia y época utilizando el token privado.

Para validar una solicitud se necesitan los siguientes pasos:

  • Authentication-epoch No debería ser hace más de 5 minutos.
  • Authentication-Reference no debe reutilizarse. Esta referencia es una cadena única, por ejemplo un GUID.
  • Se crea una cadena con la concatenación de Authentication-Reference y Authentication-epoch.
  • Esta cadena tiene un hash según el resumen SHA512.
  • El resumen está codificado en HMAC con un 'token privado' como clave (conocido tanto por el remitente como por el receptor).
  • El valor hexadecimal de este hash (minúscula, sin espacios ni guiones) y debe coincidir con el Authentication-Signature.

Ejemplo de Secuencia de Comandos

using System;
using System.Text;
using System.Security.Cryptography;
var epoch = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
string privateKey = Request.Headers["Authentication-Private-Key"]; 
string reference = Request.Headers["Authentication-Reference"] + epoch;
HMAC hMAC=new HMACSHA512(Encoding.UTF8.GetBytes(privateKey));
byte[] tokens = hMAC.ComputeHash(Encoding.UTF8.GetBytes(reference));
string authToken = BitConverter.ToString(tokens).Replace( "-", "").
ToLower();
Request.Headers["Authentication-Signature"] = authToken;
Request.Headers["Authentication-Epoch"] = epoch.ToString();
Request.Headers.Remove("Authentication-Private-Key");

Parámetros de Extremo Requeridos

  • Authentication-Private-Key: La clave privada proporcionada
  • Authentication-Reference: Cadena aleatoria, diferente según la solicitud, puede ser un UUID