console.lealog();

@leader22のWeb系に関する勉強めもブログですのだ

Slackからのリクエストを正しく検証する

たとえばSlash CommandsをAWSで作っていて、そのコマンドからPOSTリクエストが飛んでくるエンドポイントの実装をしているときの話。

別に誰に叩かれてもいいAPIなら問題ないけど、ちゃんとSlash Commandsから飛んできたリクエストであることを判定したい場合がほとんどのはず。

Deprecated: Verification Tokenを使う

これまで一般的だった、SlackアプリのBasic InformationのページにあるVerification Tokenを使う方法。

リクエストボディに入ってるトークンと照合するだけのお手軽なやつだった。

しかしこの方法は、もうすぐ使えなくなるらしい。

This deprecated Verification Token can still be used to verify that requests come from Slack, but we strongly recommend using the above, more secure, signing secret instead.

Signing Secretを使う

こっちが最新のやり方。

大筋としては、

  • Basic Informationのページから、シークレットを控えておく
  • リクエストヘッダとボディを見て、自分でもシークレットを生成する
    • ヘッダのシグネチャとタイムスタンプと、ボディで
    • HMAC/SHA256
  • 本物と比較する

という感じ。

コードはGistに上げた。

これをLambdaとかで使えばよし。

Verifying requests from Slack | Slack