node.js JWT tokenの適用
node.js JWT Tokenの適用
✔jwtとは何ですか。
JWT(Json Web Token)は、Json形式でユーザ属性を格納するClaimベースのWeb Tokenである.JWTはタグ自体を情報として用い,自己包含的に安全に情報を伝達する.主に会員認証や情報伝達に使われています!!
✔市token構造
名前付きクレーム
💿 jwt例の実施
📝 router/base.js
const jwt = require('jsonwebtoken');
const SECRET_KEY = 'MY-SECRET-KEY';
// POST /login 요청 body에 id와 password를 함께 실어서 요청으로 가정 (사실 id와 password는 암호화 되어있음)
router.post('/login', (req, res, next) => {
//받은 요청의 id와 password로 DB에서 프로필사진, 닉네임 등 로그인 정보를 가져온다.
const nickname = "CharmingKyu";
const profile = 'imageURL';
//jwt.sign(payload, secretOrPrivateKey, [options, callback])
token = jwt.sign({
type: 'JWT',
nickname: nickname,
profile: profile
}, SECRET_KEY, {
expiresIn: '15m', // 만료시간 15분
issuer: '토큰발급자',
});
//response
return res.status(200).json({
code: 200,
message: '토큰이 발급되었습니다.',
token: token
});
});
routerに存在するjsファイルに上記のコードが記述されている場合、ミドルウェアファイルjwtとなります.jsファイルを書いてあげます.📝 jwt.js
const jwt = require('jsonwebtoken');
const SECRET_KEY = 'MY-SECRET-KEY';
exports.verifyToken = (req, res, next) => {
// 인증 완료
try {
// 요청 헤더에 저장된 토큰(req.headers.authorization)과 비밀키를 사용하여 토큰을 req.decoded에 반환
req.decoded = jwt.verify(req.headers.authorization, SECRET_KEY);
return next();
}
// 인증 실패
catch (error) {
// 유효시간이 초과된 경우
if (error.name === 'TokenExpiredError') {
return res.status(419).json({
code: 419,
message: '토큰이 만료되었습니다.'
});
}
// 토큰의 비밀키가 일치하지 않는 경우
if (error.name === 'JsonWebTokenError') {
return res.status(401).json({
code: 401,
message: '유효하지 않은 토큰입니다.'
});
}
}
}
token値が必要な場合はstatus 200を出力し、トークンが無効な場合は401を出力し、期限切れの場合は419を出力する.postmanでは、認証にトークン値を入力することで確認できます.
Reference
この問題について(node.js JWT tokenの適用), 我々は、より多くの情報をここで見つけました https://velog.io/@xordbs/node.js-JWT-token-적용テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol