テック技報最新号へ →
コード

セキュリティ: JWT の検証では、許可するアルゴリズムを明示する(alg: none 対策)

トークンのヘッダーに書かれた alg をそのまま信じると、alg: none(署名なし)や想定外のアルゴリズムで改ざんしたトークンを通してしまう。検証時に許可するアルゴリズムを固定する。

@yousukezan · 投稿 2026-04-05
#security#typescript#jwt#認証

コード例(TypeScript / 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 の鍵として使わせる)に注意

出典

X の元の投稿を開く