Webhook の Discourse 署名パラメータ

こんにちは。Discourse の Webhook を使って、ユーザーの作成や更新時のイベントを利用したいと考えていますが、Discourse から送信されるデータを信頼できるようにしたいです。公開鍵と秘密鍵のペア、あるいは少なくとも署名を検証するために使える共通のシークレットキーを導入することは可能でしょうか?また、すべてのペイロードに署名するための標準的なフレームワークと、署名のシリアライズと検証を行うための標準的な PHP 実装(例)を提供することは可能でしょうか?

Facebook は、ユーザーに関する情報を送信する際にこのような仕組みを採用しています。これにより、他のソフトウェアが Discourse のユーザーやその他のオブジェクトと統合できるようになります。

Webhook 秘密鍵は、お探しのものに近いですか?以下は、WP Discourse プラグインが WordPress に設定された Webhook 秘密鍵に対してそれを検証する方法です。

public function verify_discourse_webhook_request( $data ) {
	$options = $this->get_options();
	// X-Discourse-Event-Signature は、'sha256=' . raw ペイロードの hmac で構成されます。
	// これは `hash_hmac( 'sha256', $payload, $secret )` を計算することで生成されます。
	$sig = substr( $data->get_header( 'X-Discourse-Event-Signature' ), 7 );
	if ( $sig ) {
		$payload = $data->get_body();
		// リクエストの検証に使用される鍵 - 一致する鍵を Discourse Webhook に設定する必要があります。
		$secret = ! empty( $options['webhook-secret'] ) ? $options['webhook-secret'] : '';

		if ( ! $secret ) {

			return new \WP_Error( 'discourse_webhook_configuration_error', 'Webhook 秘密鍵が設定されていません。' );
		}

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

			return $data;
		} else {

			return new \WP_Error( 'discourse_webhook_authentication_error', 'Discourse Webhook リクエストエラー: 署名が一致しませんでした。' );
		}
	}

	return new \WP_Error( 'discourse_webhook_authentication_error', 'Discourse Webhook リクエストエラー: リクエストに X-Discourse-Event-Signature が設定されていません。' );
}
「いいね!」 3