Параметры подписи Discourse в вебхуках

Привет. Я хотел бы использовать вебхуки Discourse для событий создания или обновления пользователя, но мне нужно иметь возможность доверять данным, отправляемым Discourse. Возможно ли реализовать поддержку пары открытого и закрытого ключей или хотя бы симметричного секретного ключа, чтобы я мог проверять подписанные полезные данные? Могли бы мы внедрить стандартный фреймворк для подписи всех полезных данных и предоставить стандартную реализацию на PHP для сериализации и проверки подписи?

Facebook делает это при отправке информации о пользователе. Это позволило бы другим программам интегрироваться с пользователями и другими объектами Discourse.

Близок ли секретный ключ вебхука к тому, что вы ищете? Вот как плагин WP Discourse проверяет его относительно секретного ключа вебхука, который устанавливается в WordPress:

public function verify_discourse_webhook_request( $data ) {
	$options = $this->get_options();
	// X-Discourse-Event-Signature состоит из 'sha256=' . hmac от исходной полезной нагрузки.
	// Он генерируется путем вычисления `hash_hmac( 'sha256', $payload, $secret )`.
	$sig = substr( $data->get_header( 'X-Discourse-Event-Signature' ), 7 );
	if ( $sig ) {
		$payload = $data->get_body();
		// Ключ, используемый для проверки запроса — соответствующий ключ должен быть установлен на вебхуке Discourse.
		$secret = ! empty( $options['webhook-secret'] ) ? $options['webhook-secret'] : '';

		if ( ! $secret ) {

			return new \WP_Error( 'discourse_webhook_configuration_error', 'Секретный ключ вебхука не установлен.' );
		}

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

			return $data;
		} else {

			return new \WP_Error( 'discourse_webhook_authentication_error', 'Ошибка запроса вебхука Discourse: подписи не совпали.' );
		}
	}

	return new \WP_Error( 'discourse_webhook_authentication_error', 'Ошибка запроса вебхука Discourse: заголовок X-Discourse-Event-Signature не был установлен для запроса.' );
}
3 лайка