3秒でわかる
リクエストが本処理に届く前に割り込んで、ログイン済みかどうかを判定する共通の関門。各画面に認証チェックを書かずに済ませる仕組みです。
もう少し詳しく
どういうものか
認証フィルターは、リクエストがコントローラーや画面の処理に到達する前に横から割り込み、資格情報を検証して通すか弾くかを決める層です。Java の Servlet Filter、Spring Security の Filter Chain、Express のミドルウェア、Next.js の middleware など、名前は違っても位置付けは同じです。多くの場合、Cookie のセッション ID や Authorization ヘッダーのトークンを見て、正しければ利用者情報をリクエストに載せて次へ渡します。
なぜ必要か
認証チェックを各画面の先頭に書く方式だと、画面が 50 枚あれば 50 箇所に同じコードが並びます。1 枚でも書き忘れれば、そこだけ誰でも入れる穴になります。しかもこの種の抜けはテストで気付きにくく、公開後に外部から発見されます。入口を 1 本にまとめれば、守る対象は「フィルターの設定」だけになり、レビューで確認できる量に収まります。
具体例
function requireAuth(req, res, next) {
const token = req.headers.authorization?.replace("Bearer ", "");
if (!token) return res.status(401).json({ error: "unauthenticated" });
try {
req.user = verifyToken(token);
next();
} catch {
return res.status(401).json({ error: "invalid token" });
}
}
app.use("/api/admin", requireAuth);
app.get("/api/admin/users", (req, res) => res.json(listUsers()));つまずきやすいところ
似た用語との違い
認証は本人確認、認可は権限の判定です。フィルターはこの 2 つを実行する場所であって、判定ロジックそのものではありません。
覚え方
建物の入口にある受付だと考えます。各部屋の前に警備員を立てるより、入口 1 箇所で入館証を確認する方が漏れが出ません。