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);
}
JavaScriptjwt.verify(token, secret)→ トークンが正しいかどうかを確認。- 成功時: デコードされた中身(ペイロード)が返る。
- 失敗時: エラーが投げられる(期限切れ・改ざんなど)。
よく使うテンプレート集
トークンの発行
const token = jwt.sign({ userId: 123 }, secret, { expiresIn: "1h" });
JavaScriptexpiresIn→ 有効期限を設定できる。
トークンの検証
try {
const payload = jwt.verify(token, secret);
console.log(payload.userId);
} catch (err) {
console.error("トークンエラー:", err.message);
}
JavaScriptExpress ミドルウェアで使う
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 保護ができるようになります。
