Salut. J’aimerais utiliser les webhooks de Discourse lorsqu’un utilisateur est créé ou mis à jour, mais je souhaite pouvoir faire confiance aux données envoyées par Discourse. Y a-t-il un moyen d’ajouter une prise en charge des clés publique-privée, ou du moins une clé secrète symétrique, que je pourrais utiliser pour vérifier la charge utile signée ? Pourrions-nous mettre en place un cadre standard pour signer toutes les charges utiles et une implémentation PHP standard, par exemple, pour sérialiser et vérifier la signature ?
Facebook le fait lorsqu’il envoie des informations sur un utilisateur. Cela permettrait à d’autres logiciels de s’intégrer avec les utilisateurs et autres objets de Discourse.
La clé secrète du Webhook correspond-elle à ce que vous recherchez ? Voici comment le plugin WP Discourse la vérifie par rapport à la clé secrète du Webhook définie sur WordPress :
public function verify_discourse_webhook_request( $data ) {
$options = $this->get_options();
// La valeur de 'X-Discourse-Event-Signature' est constituée de 'sha256=' suivi du HMAC du contenu brut.
// Elle est générée en calculant `hash_hmac( 'sha256', $payload, $secret )`.
$sig = substr( $data->get_header( 'X-Discourse-Event-Signature' ), 7 );
if ( $sig ) {
$payload = $data->get_body();
// Clé utilisée pour vérifier la requête - une clé correspondante doit être définie sur le webhook Discourse.
$secret = ! empty( $options['webhook-secret'] ) ? $options['webhook-secret'] : '';
if ( ! $secret ) {
return new \WP_Error( 'discourse_webhook_configuration_error', 'La clé secrète du webhook n\'a pas été définie.' );
}
if ( hash_hmac( 'sha256', $payload, $secret ) === $sig ) {
return $data;
} else {
return new \WP_Error( 'discourse_webhook_authentication_error', 'Erreur de requête du webhook Discourse : les signatures ne correspondent pas.' );
}
}
return new \WP_Error( 'discourse_webhook_authentication_error', 'Erreur de requête du webhook Discourse : la valeur X-Discourse-Event-Signature n\'a pas été définie pour la requête.' );
}