//유저 정보를 확인한 서버의 토큰 생성
//express 모듈 사용
const jwt = require('jsonwebtoken');
let accessToken = jwt.sign(<payload>, <secret>,<옵션들 ex){expiresIn: "10h"}>);
let refreshToken = jwt.sign(<payload>, <secret>,<옵션들 ex){expiresIn: "20h"}>);
//refreshToken은 쿠키에 전달
res.cookie('refreshToken', refreshToken, <쿠키 옵션들>})
//accessToken은 response body에 전달
res.json({accessToken: {accessToken}});
//클라이언트의 로그인 요청
axios.post('https://localhost:4000/login',<body>,<header>)
.then(result => {
<accessToken을 저장. react의 경우 state등에 저장한다.>
})
.catch(err => <에러처리>)
//클라이언트의 토큰을 이용한 요청
//'Authorization'헤더에 'Bearer '라는 문자열과 토큰을 합쳐서 요청을 보낸다.
axios.get(<주소>,
{
headers: {
Authorization: 'Bearer ' + <accessToken>
}
})
//서버의 토큰 유효성 검사
//Beaerer 라는 문자열 분리
let token = req.headers.authorization.split(" ")[1];
jwt.verify(token, <secret>, (err, result) => {
<next()를 호출해 다음 미들웨어로 연결, result로 DB에서 유저 정보 조회 등...>
}
출처
https://jwt.io/introduction
https://developer.okta.com/blog/2019/02/14/modern-token-authentication-in-node-with-express