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"}';
}
広告