セキュリティ: JWT の検証では、許可するアルゴリズムを明示する(alg: none 対策)
トークンのヘッダーに書かれた alg をそのまま信じると、alg: none(署名なし)や想定外のアルゴリズムで改ざんしたトークンを通してしまう。検証時に許可するアルゴリズムを固定する。
コード例(TypeScript / jose)
jose)ts
import { jwtVerify, createRemoteJWKSet } from "jose";
const JWKS = createRemoteJWKSet(new URL("https://auth.example.com/.well-known/jwks.json"));
const { payload } = await jwtVerify(token, JWKS, {
algorithms: ["RS256"], // ここを固定する
issuer: "https://auth.example.com/",
audience: "my-api",
});チェックリスト
- 署名を検証せずに payload を使うデコード関数(
decode系)を、認可の判断に使っていないか algorithmsを指定しているか(noneを許可していないか)iss・aud・expも検証しているか- HS256 と RS256 を混同させる攻撃(公開鍵を HMAC の鍵として使わせる)に注意
出典
- @yousukezan 2026-04-05(Qiita 記事の紹介): @yousukezan · 2026-04-05