Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando creas una suscripción a un evento de Event Grid para un endpoint webhook, Event Grid debe confirmar que eres el propietario del endpoint antes de que entregue eventos. Si ese apretón de manos de validación no se completa, la creación de la suscripción falla. Este artículo te ayuda a identificar por qué falla el apretón de manos y cómo solucionarlo.
Síntomas
Cuando creas una suscripción a un evento, ves un mensaje de error similar al siguiente texto:
The attempt to validate the provided endpoint https://your-endpoint-here failed. For more details, visit https://aka.ms/esvalidation
El error indica que Event Grid no pudo completar el handshake de validación con tu endpoint webhook, por lo que Event Grid no crea la suscripción.
Cause
Event Grid requiere que demuestres la propiedad de un endpoint webhook antes de que empiece a entregar eventos. Este requisito evita que un usuario malicioso inunde un endpoint con eventos. El error de validación aparece cuando el handshake entre Event Grid y tu endpoint no tiene éxito. Entre las causas comunes se incluyen las siguientes:
- Tu punto de conexión no devuelve el código de validación para el intercambio inicial síncrono ni devuelve
200 OKpara el intercambio inicial asíncrono (manual). - Un cortafuegos, Azure Application Gateway o un firewall de aplicaciones web (WAF) delante de tu endpoint bloquean la solicitud de validación y devuelve
403 (Forbidden). - Tu endpoint utiliza el esquema CloudEvents v1.0 pero no responde a la solicitud de validación HTTP OPTIONS .
- Tu endpoint utiliza un certificado auto-firmado, que Event Grid no soporta para validación.
Para una descripción completa del handshake de validación, véase Validación de endpoint con esquema de eventos de Event Grid y validación de endpoint usando el esquema CloudEvents.
Solución 1: Probar el proceso de validación de una suscripción con esquema de Event Grid
Envía un ejemplo de SubscriptionValidationEvent a tu webhook y confirma la respuesta:
- Envía una solicitud HTTP POST a la URL de tu webhook con un cuerpo de solicitud de ejemplo
SubscriptionValidationEventusando curl o una herramienta similar. - Si tu webhook implementa el intercambio inicial síncrono, verifica que devuelva
validationCodeen la respuesta. Debes devolver un código de estadoHTTP 200 OK. La Cuadrícula de Eventos no reconoceHTTP 202 Acceptedcomo respuesta válida y la solicitud debe completarse en 30 segundos. - Si tu webhook implementa el handshake asincrónico (manual), verifica que tu endpoint devuelva
200 OK. Luego completa el handshake enviando una solicitud GET a losvalidationUrldatos del evento en un plazo de 10 minutos. La URL de validación usa el puerto 553, así que actualiza las reglas del firewall si ese puerto está bloqueado.
Aquí tienes un ejemplo SubscriptionValidationEvent de carga útil JSON que puedes enviar:
[
{
"id": "aaaa0000-bb11-2222-33cc-444444dddddd",
"topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"subject": "",
"data": {
"validationCode": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
},
"eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
"eventTime": "2018-01-25T22:12:19.4556811Z",
"metadataVersion": "1",
"dataVersion": "1"
}
]
Esta es la respuesta esperada y exitosa:
{
"validationResponse": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
}
Aquí tienes el comando curl equivalente para validar una suscripción de webhook que utiliza el esquema de eventos de Event Grid:
curl -X POST -d '[{"id": "aaaa0000-bb11-2222-33cc-444444dddddd","topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","subject": "","data": {"validationCode": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"},"eventType": "Microsoft.EventGrid.SubscriptionValidationEvent","eventTime": "2018-01-25T22:12:19.4556811Z", "metadataVersion": "1","dataVersion": "1"}]' -H 'Content-Type: application/json' https://{your-webhook-url.com}
Para saber más, consulte Validación de endpoint con esquema de eventos de la Grid de Eventos.
Solución 2: Eliminar las reglas de firewall o WAF que bloquean la solicitud de validación
Si tu webhook devuelve 403 (Forbidden), comprueba si está detrás de Azure Application Gateway o de un firewall de aplicaciones web. Si es así, desactiva las siguientes reglas del firewall y vuelve a hacer el HTTP POST:
- 920300 (falta un encabezado de aceptación en la solicitud)
- 942430 (Detección restringida de anomalías de caracteres SQL (args): número de caracteres especiales superado (12))
- 920230 (varias codificaciones de direcciones URL detectadas)
- 942130 (ataque de inyección SQL: detectada tautología SQL)
- 931130 (Posible ataque remoto de inclusión de archivos (RFI): referencia o enlace fuera del dominio)
Solución 3: Validar una suscripción a un esquema de CloudEvents
Si tu suscripción utiliza el esquema CloudEvents v1.0, Event Grid utiliza protección contra abusos de CloudEvents en lugar del evento de validación de suscripción. Tu extremo debe responder al método HTTP OPTIONS y devolver la cabecera WebHook-Allowed-Origin. Para saber más, consulta Validación de endpoint usando el esquema CloudEvents.
Contenido relacionado
Si necesitas más ayuda, haz tu pregunta en la página de preguntas y respuestas de Microsoft para Event Grid o abre un ticket de soporte.