Teamsの送信Webhookの署名値検証をPHPで行う

Teamsの送信Webhook(Outgoing Webhook)の署名検証をPHPで行う方法です。C#node.jsはMicrosoft Documentに記載があります。

ちなみに送られてきたメッセージ対応する応答は5秒以内に返信しないと、エラー扱いとなるようです。

$json_string = file_get_contents('php://input');
$json_object = json_decode($json_string);

$secret = '{送信Webhookトークン}';
// 送られてきた内容を元と送信Webhookトークンをもとに、ハッシュ値を計算(署名値)を計算
$hash = hash_hmac('sha256', $json_string, base64_decode($secret), true);
$msg_hash = 'HMAC '.base64_encode($hash);

// HTTPのAuthorization ヘッダ(Teams側の署名値)を取得
$header = getallheaders();
$sign = $header['Authorization'];

header("Cache-Control: no-transform,public,max-age=300,s-maxage=900");
header('Content-Type: application/json');
http_response_code(200);

// 署名値の検証
if ($msg_hash == $sign ) {
	// JSON Body ausgeben
	echo '{"type": "message", "text": "OK! Webhook received"}';
} else {
	echo '{"type": "message", "text": "FAILED! Webhook received"}';
}