JavaScript 逆引き集 | JWT の検証(Node)

JavaScript JavaScript
スポンサーリンク

JWT の検証(Node.js) — jwt.verify(token, secret)(jsonwebtoken ライブラリ)

Web アプリや API では「ログイン済みかどうか」を確認するために JWT(JSON Web Token) がよく使われます。
初心者は「JWT = サーバーから渡される署名付きの通行証」と覚えると理解しやすいです。
Node.js では jsonwebtoken ライブラリを使って簡単に検証できます。


基本のコード例

import jwt from "jsonwebtoken";

const secret = "mySecretKey"; // サーバー側で決めた秘密鍵
const token = jwt.sign({ id: 1, name: "Aki" }, secret); // 仮に発行したトークン

try {
  const decoded = jwt.verify(token, secret); // 検証
  console.log("検証成功:", decoded);
} catch (err) {
  console.error("トークンが無効:", err.message);
}
JavaScript
  • jwt.verify(token, secret) → トークンが正しいかどうかを確認。
  • 成功時: デコードされた中身(ペイロード)が返る。
  • 失敗時: エラーが投げられる(期限切れ・改ざんなど)。

よく使うテンプレート集

トークンの発行

const token = jwt.sign({ userId: 123 }, secret, { expiresIn: "1h" });
JavaScript
  • expiresIn → 有効期限を設定できる。

トークンの検証

try {
  const payload = jwt.verify(token, secret);
  console.log(payload.userId);
} catch (err) {
  console.error("トークンエラー:", err.message);
}
JavaScript

Express ミドルウェアで使う

function authMiddleware(req, res, next) {
  const token = req.headers["authorization"]?.split(" ")[1];
  if (!token) return res.status(401).send("トークンが必要です");

  try {
    const payload = jwt.verify(token, secret);
    req.user = payload; // ユーザー情報をリクエストに追加
    next();
  } catch (err) {
    res.status(401).send("トークンが無効です");
  }
}
JavaScript

例題: ユーザー認証チェック

import express from "express";
import jwt from "jsonwebtoken";

const app = express();
const secret = "superSecret";

// 認証が必要なルート
app.get("/profile", (req, res) => {
  const token = req.headers["authorization"]?.split(" ")[1];
  if (!token) return res.status(401).json({ error: "トークンが必要です" });

  try {
    const user = jwt.verify(token, secret);
    res.json({ message: "ようこそ!", user });
  } catch {
    res.status(401).json({ error: "トークンが無効です" });
  }
});

app.listen(3000, () => console.log("サーバー起動中"));
JavaScript
  • 効果: トークンが正しければプロフィール情報を返し、間違っていればエラー。

実務でのコツ

  • 秘密鍵は厳重に管理: 漏れると誰でもトークンを偽造できる。
  • 有効期限を設定: 無期限トークンは危険。expiresIn を必ず使う。
  • Bearer ヘッダと組み合わせる: Authorization: Bearer <token> で送るのが一般的。
  • エラー処理を丁寧に: 期限切れ・改ざん・未提供などを区別して返すと親切。

練習問題(商品 API の認証)

function getProducts(req, res) {
  const token = req.headers["authorization"]?.split(" ")[1];
  try {
    jwt.verify(token, secret);
    res.json([{ id: "p1", name: "Laptop" }]);
  } catch {
    res.status(403).json({ error: "認証が必要です" });
  }
}
JavaScript

直感的な指針

  • JWT = サーバーが発行する署名付き通行証。
  • jwt.verify(token, secret) で正しいかチェック。
  • 成功なら中身を取り出せる、失敗ならエラー。
  • 初心者は「発行」「検証」「Express ミドルウェア」で練習すると理解が深まる。

これを覚えれば「Node.js で JWT を使った認証」を安全に実装でき、ログイン機能や API 保護ができるようになります。

タイトルとURLをコピーしました