
json에서 사용하는 웹 토큰이다.
개념 : JSON 형태의 데이터를 안전하게 전송하기 위한 웹에서 사용하는 토큰
cf. 토큰 : (인증용) 입장 가능한 유저야 / (인가용)그리고 난 사실 관리자 아니면 일반 유저 권한을 가졌어.
를 바로 보여줄 수 있는 친구야.
= 즉, 토큰을 가진 사용자가 "증명"을 하기 위한 수단
장점 : 보안이 강함! = 암호화가 되어 있어.
cf. 토큰을 발행하는 서버를 따로 만들어줄 수도 있음!
구조 : 그래서 JWT가 어떻게 생겼냐면
헤더 : 토큰을 암호화하는 데 사용한 알고리즘, 토큰의 형태 (jwt)
페이로드 : 사용자 정보 (이름, 주소, 핸드폰번호, 등등 비밀번호는 X)
서명 : 만약 페이로드 값이 바뀌면, 이 서명값이 통째로 바뀌기 때문에 우리는 JWT를 믿고 쓸 수 있다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.
KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30
이렇게 생겼는데,
이게 암호화가 된 모습이야. 이런걸 Encoded라고 하고,
자세히 보면 . 을 통해서 총 3가지로 나눠진 것을 알 수 있는데,
각각 이 암호화를 풀어보면 어떤 뜻이 담겨져 있냐면,
첫 번째 줄은 : 헤더(Header)라고 해
{
"alg": "HS256",
"typ": "JWT"
}
두 번째 줄은 페이로드
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022
}
세 번째 줄은 서명
a-string-secret-at-least-256-bits-long
이렇게 각각의 의미가 담겨져있는거야.

이거 천천히 읽으면서 생각보면 되게 쉬울거야!
아 중요한 걸 빼먹었다.
자세한 내용은
https://www.npmjs.com/package/jsonwebtoken
이 사이트에서 확인하면 되고,
token을 사용하고 싶으면 꼭 터미널에서
npm i jsonwebtoken
다운받고 사용하기!
var jwt = require("jsonwebtoken");
var dotenv = require("dotenv");
dotenv.config();
//서명 = 토큰 발행
var token = jwt.sign({ foo: "bar" }, process.env.PRIVATE_KEY);
//지금 이게 token생성을 한거고 JWT 서명을 한거야. (페이로드, 나만의 암호키) + SHA256
//검증
//만약 검증에 성공하면 ,페이로드 값을 확인할 수 있음.
var decoded = jwt.verify(token, process.env.PRIVATE_KEY);
console.log(token);
여기서도 require로 jwt 불러와서 사용하기!
그리고 sign으로 서명해주는데, 불러오는 값은 env로 private하게 가져오면 돼!
다음 글인 env글과 함께 보면 좋아.
ex) httpOnly와 expiresIn으로 토큰에 유효기간 넣어주기, issuer로 누가 이 토큰 발행했는지 알 수 있게 해주는 예시
const token = jwt.sign(
{
email: loginUser.email,
name: loginUser.name,
},
process.env.PRIVATE_KEY,
{
expiresIn: "10m", //쿠키를 발급해주면 토큰에 유효기간 넣어준 거야. 10m은 10분
issuer: "aen", //이건 누가 발행을 해줬는지, 알려주는 내용
}
);
res.cookie("token", token, { httpOnly: true });