Nodejs エントリ トークン検証のための jsonwebtoken の使用
序文
プロジェクトにおいてトークン検証が必須項目であることは自明の理ですが、今日はNode.jsで一目置かれている魔法のツール、jsonwebtokenを紹介します。
1. トークンとは何ですか? jsonwebtoken とは何ですか?
インターネットの世界では、トークンは認証と認可を表すために使用されるトークンです。jsonwebtoken を例にとると、それによって生成される JWT は一種のトークンです。トークンは通常、サーバーによってユーザーに発行され、ユーザーが認証された後にユーザーを識別するために使用されます。ユーザーが承認を必要とするリソースにアクセスしたい場合、トークンはユーザーの ID と権限を証明する資格情報になります。jsonwebtoken は、Node.js アプリケーションで JSON Web Token (JWT) を作成および検証するためのライブラリです。JWT は、JSON オブジェクトをセキュリティ トークンとして使用する軽量の認証および認可メカニズムであり、クライアントとサーバー間で認証情報を渡す際の安全性と信頼性が向上します。
2. ステップを使用する
1. jsonwebtokenをインストールする
jsonwebtoken のインストールは非常に簡単です。ノード プロジェクトを開いてターミナルに入り、次のコマンドを入力します。
npm install jsonwebtoken
2. 秘密鍵を生成する
jsonwebtoken を使用する前に、まず JWT に暗号署名するための秘密キー (secretKey) を生成する必要があります。キー生成ルールは非常に重要であり、一般的に使用される生成ルールの例を次に示します。
const crypto = require('crypto');
const generateSecretKey = () => {
return crypto.randomBytes(32).toString('hex');
};
const secretKey = generateSecretKey();
console.log('Generated secret key: ', secretKey);
上記のコードでは、Node.js 暗号化モジュールを使用して、十分な強度を持つランダム キーを生成します。ここでは、32 バイトの秘密鍵を生成し、コンソールに出力します。生成された秘密キーは漏洩を避けるために適切に保管する必要があることに注意してください。
3. jsonwebtoken の使用方法は?
まず、jsonwebtoken ライブラリをインポートする必要があります。
const jwt = require('jsonwebtoken');
4.JWTの生成
次に、JWT を作成しましょう。jsonwebtoken を使用する方法は
sign
、このタスクを達成するのに役立ちます。
const payload = { user: 'John Doe' };
const secretKey = 'supersecretkey';
const token = jwt.sign(payload, secretKey);
console.log(token);
上記のコードでは、JWT で渡したい情報を含むペイロード オブジェクトを定義します。次に、JWT の暗号署名に使用される、以前に生成された秘密キー (secretKey) を提供します。最後に、jwt.sign
メソッドを使用して JWT を生成し、出力します。
5. JWT を検証する
検証フェーズでは、jsonwebtoken が JWT の署名が有効かどうかを検証し、ペイロード内のデータを解析します。JWT の署名を検証するには、同じ秘密鍵を使用する必要があることに注意してください。
function verifyToken(req, res, next) {
const token = req.headers.token; // 从请求头中获取 token
if (!token) {
res.status(401).json({ code: 401,success: false, msg: "未登录或登录过期!" });
return;
}
jwt.verify(token, 'token', (err, decoded) => {
if (err) {
res.status(401).json({ code: 401,success: false, msg: "登录过期,请重新登录!" });
return;
}
req.userId = decoded.userId; // 将解码后的用户信息存储在请求对象中,以便后续接口使用
next();
});
}
上記のコードでは、JWT と以前に生成されたシークレットを提供し、jwt.verify
メソッドを使用して検証します。検証が成功すると、コールバック関数でデコードされたペイロード データにアクセスできます。
6. インターフェースリクエストの結合
jsonwebtoken は、認証および認可のためのインターフェース要求と組み合わせて使用することもできます。
axios.get("https://api.example.com/info", verifyToken, (req, res, next) => {
const userId = req.userId;
pool.query("SELECT * FROM user WHERE id = ?", [userId], (err, result) => {
if (err) {
next(err);
return;
}
if (result.length > 0) {
const user = result[0];
res.json({ code: 200, success: true, msg: "查询用户信息成功", user });
} else {
res.json({ code: 500, success: false, msg: "用户不存在" });
}
});
上記のコードでは、axios ライブラリを使用して GET リクエストを「https://api.example.com/data」に送信します。リクエスト ヘッダーに「Authorization」フィールドを追加し、JWT をベアラー トークンとしてリクエスト ヘッダーに添付することで、認証情報を API に渡すことができます。認証が成功すると、API は対応するデータを返します。
要約する
このブログでは、Node.js での jsonwebtoken の使用について詳しく紹介しました。jsonwebtoken は、JSON Web トークン (JWT) を作成および検証するための強力で人気のあるライブラリです。JWT は、JSON オブジェクトをセキュリティ トークンとして使用することで、クライアントとサーバー間の認証情報送信のセキュリティと信頼性を向上させる軽量の認証および認可メカニズムです。