Parametri di firma Discourse nei webhook

Ciao. Vorrei utilizzare i webhook di Discourse quando un utente viene creato o aggiornato, ma mi piacerebbe poter fidarmi dei dati inviati da Discourse. Esiste la possibilità di implementare il supporto per chiavi pubbliche-private o, almeno, una chiave segreta simmetrica che possa essere utilizzata per verificare il payload firmato? Potremmo adottare un framework standard per firmare tutti i payload e un’implementazione standard in PHP, ad esempio, per serializzare e verificare la firma?

Facebook lo fa quando invia informazioni su un utente. Questo permetterebbe ad altri software di integrarsi con gli utenti di Discourse e altri oggetti.

La chiave segreta del Webhook si avvicina a ciò che stai cercando? Ecco come il plugin WP Discourse la verifica rispetto alla chiave segreta del Webhook impostata su WordPress:

public function verify_discourse_webhook_request( $data ) {
	$options = $this->get_options();
	// L'X-Discourse-Event-Signature è composto da 'sha256=' seguito dall'HMAC del payload grezzo.
	// Viene generato calcolando `hash_hmac( 'sha256', $payload, $secret )`.
	$sig = substr( $data->get_header( 'X-Discourse-Event-Signature' ), 7 );
	if ( $sig ) {
		$payload = $data->get_body();
		// Chiave utilizzata per verificare la richiesta: una chiave corrispondente deve essere impostata sul webhook di Discourse.
		$secret = ! empty( $options['webhook-secret'] ) ? $options['webhook-secret'] : '';

		if ( ! $secret ) {

			return new \WP_Error( 'discourse_webhook_configuration_error', 'La chiave segreta del webhook non è stata impostata.' );
		}

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

			return $data;
		} else {

			return new \WP_Error( 'discourse_webhook_authentication_error', 'Errore nella richiesta del webhook di Discourse: le firme non corrispondono.' );
		}
	}

	return new \WP_Error( 'discourse_webhook_authentication_error', 'Errore nella richiesta del webhook di Discourse: l''X-Discourse-Event-Signature non è stata impostata per la richiesta.' );
}
3 Mi Piace