はじめに
実務で、あるサービスとWebhookを用いて連携をする際に、302エラーとなりログイン画面にリダイレクトしてしまう問題が発生しました。
初歩的なミスではありますが、今後同じミスをしないようここに残します。
結論として
app/Http/Middleware/VerifyCsrfTokenに設定したWebhookを受け取るURLを追記する必要がありました。
protected $except = [
// ここに追加する。
'/webhook/〇〇〇'
];
なぜ追加する必要があるのか
まず、VerifyCsrfTokenミドルウェアでは、CSRF攻撃から保護するために、POSTリクエストに対してCSRFトークンを持っているかチェックを行います。
ただし、Webhookリクエストは外部のシステムから直接送信されるため、CSRFトークンを持たずVerifyCsrfTokenミドルウェアによってリクエストが拒否されてしまうのです。
この問題を解決するために、$exceptプロパティを使用して、特定のURLをCSRF保護のチェックから除外するようにします。(そのURLに対するリクエストはCSRFトークンのチェックを行わないようにする)
$exceptプロパティに、URLを追加することで、外部サービスからのWebhookリクエストを正常に受け取ることができるようになります!
最後に
今回は初歩的なミスによるエラーでしたが、改めて原理について理解するいい機会でした。
今後もエラーに遭遇した際は、解決方法を記事に残していこうと思います。