Parámetros de firma de Discourse en webhooks

Hola. Me gustaría utilizar los webhooks de Discourse cuando se crea o actualiza un usuario, pero necesito poder confiar en los datos enviados por Discourse. ¿Existe alguna forma de implementar soporte para claves pública-privada o, al menos, una clave secreta simétrica que pueda usar para verificar la carga útil firmada? ¿Podríamos establecer un marco estándar para firmar todas las cargas útiles y una implementación estándar en PHP, por ejemplo, para serializar y verificar la firma?

Facebook lo hace cuando envía información sobre un usuario. Esto permitiría que otros programas se integren con los usuarios de Discourse y otros objetos.

¿Se acerca la clave secreta del Webhook a lo que estás buscando? Así es como el plugin WP Discourse la verifica frente a la clave secreta del Webhook que se configura en WordPress:

public function verify_discourse_webhook_request( $data ) {
	$options = $this->get_options();
	// La X-Discourse-Event-Signature consiste en 'sha256=' . hmac del payload sin procesar.
	// Se genera calculando `hash_hmac( 'sha256', $payload, $secret )`.
	$sig = substr( $data->get_header( 'X-Discourse-Event-Signature' ), 7 );
	if ( $sig ) {
		$payload = $data->get_body();
		// Clave utilizada para verificar la solicitud: se debe configurar una clave coincidente en el webhook de Discourse.
		$secret = ! empty( $options['webhook-secret'] ) ? $options['webhook-secret'] : '';

		if ( ! $secret ) {

			return new \WP_Error( 'discourse_webhook_configuration_error', 'La clave secreta del webhook no se ha configurado.' );
		}

		if ( hash_hmac( 'sha256', $payload, $secret ) === $sig ) {

			return $data;
		} else {

			return new \WP_Error( 'discourse_webhook_authentication_error', 'Error de solicitud del webhook de Discourse: las firmas no coinciden.' );
		}
	}

	return new \WP_Error( 'discourse_webhook_authentication_error', 'Error de solicitud del webhook de Discourse: no se estableció la X-Discourse-Event-Signature para la solicitud.' );
}
3 Me gusta