Proteggere i payload del webhook con un segreto
Dopo che la funzione è stata configurata per ricevere i payload, rimarrà in attesa di eventuali payload inviati all'endpoint configurato. Per motivi di sicurezza, è possibile limitare le richieste a quelli provenienti da GitHub. A tale scopo, è possibile procedere in diversi modi. Ad esempio, è possibile scegliere di approvare le richieste provenienti dall'indirizzo IP di GitHub. Un metodo più semplice è quello di configurare un token segreto e convalidare la richiesta tramite questo token.
Nello scenario di esempio i responsabili del reparto IT sono soddisfatti della funzione attivata dal webhook appena creata nell'app di Funzioni di Azure. Tutte le informazioni relative agli aggiornamenti del wiki aziendale vengono analizzate da tale funzione e inviate all'azienda, ogni volta che viene attivato l'evento Gollum. I responsabili vogliono conoscere il grado di sicurezza delle informazioni passate da GitHub. Hanno espresso la necessità di trovare un modo per proteggere le informazioni e verificare che gli aggiornamenti provengano effettivamente da GitHub.
In questa unità si apprenderà come proteggere il payload del webhook con un segreto e convalidare i payload da GitHub.
Segreti per il webhook
L'impostazione di un segreto per il webhook consente di garantire che le richieste POST inviate all'URL del payload provengano da GitHub. Quando si imposta un segreto, si riceverà l'intestazione x-hub-signature
nella richiesta POST del webhook.
In GitHub è possibile impostare il campo del segreto passando al repository in cui è stato configurato il webhook e quindi modificando il webhook. Verrà illustrato come eseguire questa operazione per questo esempio nell'esercizio successivo.
Convalidare i payload da GitHub
Quando il token segreto è impostato, GitHub lo usa per creare una firma hash per ogni payload. Questa firma hash viene passata con ogni richiesta nelle intestazioni come x-hub-signature
.
Quando la funzione riceve una richiesta, è necessario calcolare l'hash usando il segreto e assicurarsi che corrisponda all'hash nell'intestazione della richiesta. GitHub usa un digest esadecimale HMAC SHA1 per calcolare l'hash, quindi è necessario calcolare l'hash in questo stesso modo, usando la chiave del segreto e il corpo del payload. La firma hash inizia con il testo sha1=
.