مرحباً. أود استخدام روابط الويب (webhooks) في Discourse عند إنشاء مستخدم أو تحديثه، لكنني أرغب في القدرة على الثقة بالبيانات المرسلة من Discourse. هل توجد طريقة لدعم مفتاح عام-خاص، أو على الأقل مفتاح سري متماثل، يمكنني استخدامه للتحقق من الحمولة الموقعة؟ هل يمكننا اعتماد إطار عمل قياسي لتوقيع جميع الحمولات وتنفيذ قياسي بلغة PHP، على سبيل المثال، لتسلسل الحمولة والتحقق من التوقيع؟
تقوم فيسبوك بذلك عند إرسال معلومات حول مستخدم. هذا سيسمح لبرمجيات أخرى بالاندماج مع مستخدمي Discourse والكائنات الأخرى.
هل يقترب مفتاح سر الويب هوك مما تبحث عنه؟ إليك كيف يتحقق ملحق WP Discourse منه مقابل مفتاح سر الويب هوك الذي يتم تعيينه على ووردبريس:
public function verify_discourse_webhook_request( $data ) {
$options = $this->get_options();
// يتكون X-Discourse-Event-Signature من 'sha256=' متبوعًا بـ hamc للحمولة الخام.
// يتم إنشاؤه عن طريق حساب `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 للطلب.' );
}