Las URLs de webhooks quedan expuestas en internet. Para garantizar que una request realmente vino de iFood, implementamos el header X-IFood-Signature en todas las requests de webhook. Este header permite validar la autenticidad de los mensajes recibidos.Rechaza requests con firmas inválidas. Esta validación es obligatoria para la homologación del webhook. iFood puede enviar eventos con firmas inválidas para probar tu integración. Esta verificación también protege contra fraudes. Auditamos todos los eventos entregados, los intentos de entrega y los eventos descartados.
Validación
El webhook usa (HMAC) con SHA256 para firmar cada mensaje. El valor final se codifica en hexadecimal. La firma usa el client secret de la aplicación (el mismo utilizado para generar tokens), disponible en la pestaña "Credenciales" del Portal del Desarrollador. Cada request incluye esta firma en el header X-IFood-Signature. Para validar, genera el HMAC del mensaje recibido usando tu secret (en lugar seguro) y compara con la firma recibida usando comparación segura (ejemplo). La mayoría de los lenguajes tienen bibliotecas con soporte nativo:
Los campos pueden ser agregados a cualquier evento en cualquier momento, sin causar breaking change. Por eso, valida la firma antes de convertir el contenido del mensaje en objeto. Genera la firma usando el byte array del body exactamente como fue recibido.Este cuidado es esencial en JSON, ya que {"prop1": "value1", "prop2": "value2"} y {"prop2": "value2", "prop1": "value1"} son equivalentes para parsers, pero forman byte arrays diferentes. Los caracteres especiales también pueden variar conforme a la biblioteca o lenguaje.
Ejemplos
Todos los ejemplos son válidos para el mismo JSON, pero con diferentes formatos y deben ser soportados por tu integración: