Sécuriser des charges utiles de webhook avec un secret

Une fois que votre fonction est configurée pour recevoir des charges utiles, elle écoute toutes les charges utiles envoyées au point de terminaison que vous avez configuré. Pour des raisons de sécurité, vous voudrez peut-être autoriser uniquement les requêtes provenant de GitHub. Pour cela, vous avez plusieurs méthodes. Par exemple, vous pouvez choisir d’approuver les requêtes provenant de l’adresse IP GitHub. Une méthode plus simple consiste à configurer un jeton secret et à valider la requête à l’aide de ce jeton.

Dans l’exemple de scénario, le responsable du service informatique est satisfait de la fonction déclenchée par webhook que vous avez créée dans une application Azure Functions. Toutes les informations concernant les mises à jour du wiki de la société sont analysées par la fonction puis envoyées à la société chaque fois que l’événement Gollum est déclenché. Le responsable vous a demandé si les informations provenant de GitHub étaient suffisamment sécurisées. Il vous a demandé de trouver un moyen de sécuriser ces informations et de vérifier que les mises à jour proviennent bien de GitHub.

Dans cette unité, vous allez voir comment sécuriser votre charge utile de webhook avec un secret et comment valider les charges utiles provenant de GitHub.

Secrets de webhook

Les secrets de webhook vous permettent d’être sûr que les requêtes POST envoyées à l’URL de la charge utile proviennent bien de GitHub. Lorsque vous définissez un secret, vous recevez l’en-tête x-hub-signature dans la requête POST du webhook.

Dans GitHub, vous pouvez définir le champ secret en accédant au dépôt dans lequel vous avez configuré votre webhook, puis en modifiant celui-ci. Nous allons vous montrer comme faire pour notre exemple dans le prochain exercice.

Validation des charges utiles provenant de GitHub

Lorsque votre jeton secret est défini, GitHub l’utilise pour créer une signature de hachage pour chaque charge utile. Cette signature de hachage est passée dans l’en-tête de chaque requête en tant que x-hub-signature.

Lorsque votre fonction reçoit une requête, vous devez calculer le code de hachage à l’aide de votre secret puis vérifier qu’il correspond à celui de l’en-tête de requête. GitHub utilise un digest hexadécimal HMAC SHA1 pour calculer le code de hachage. Vous devez donc calculer le code de hachage de la même façon, à l’aide de la clé de votre secret et du corps de votre charge utile. La signature de hachage commence par ce texte : sha1=.