기본 개념
JWT란?
Jason Web Token
토큰 데이터의 구조
실제 토큰=>1
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0MTIzMTIzNTQzNTM0NTY3ODkwIiwibmFtZSI6IkpvaDM0NTM0NTM0NW4gRG9lIiwiYWRtaW4iOnRydWV9.gUpPTlD6M3F264lbRyXa6lat7t1tqoP3MHOwFX1qies
각 부분은 .를 기준으로 3 파트로 나뉜다.
첫번째 파트 => 서명키 생성 방식에 대한 정보 (header)1
2
3
4
5{
"alg":"HS256",
"type":"JWT"
}
=> eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
두번째 파트 => 실제 데이터 정보 (payload)1
2
3
4
5
6{
"sub": "1234123123543534567890",
"name": "Joh345345345n Doe",
"admin": true
}
=> eyJzdWIiOiIxMjM0MTIzMTIzNTQzNTM0NTY3ODkwIiwibmFtZSI6IkpvaDM0NTM0NTM0NW4gRG9lIiwiYWRtaW4iOnRydWV9
세번째 파트 => 데이터에 대한 무결성 / 변조 방지를 위한 HMAC
HMACSHA256(base64UrlEncode(header) + “.” +base64UrlEncode(payload),ServerkeyData)
=> gUpPTlD6M3F264lbRyXa6lat7t1tqoP3MHOwFX1qies
준비사항
- jsonwebtoken 설치
npm install jsonwebtoken
Work Flow
- 회원가입 요청 => 서버에 id와 password 전달
- 서버에서 받은 email을 토대로 중복여부 판별
- 중복되지 않았다면 db에 jwt토큰을 복호화 하기 위한 secret key를 저장(random generate)
- 위의 secret key를 db에 저장
- 사용자가 로그인 시도하면 해당 secret key를 검색하여 토큰을 복호화하여 전달한 토큰과 일치하는지 확인하여 토큰을 전달한다.
- 받은 토큰을 사용자는 로컬에 저장한다.
Process
모듈 불러오기
const jwt = require('jsonwebtoken')
jasonwebtoken으로 토큰 발급하기
jwt.sign(payload, secret, options, [callback])
만약에 callback 이 전달되면 비동기적으로 작동하며, 콜백함수의 파라미터는 (err, token) 입니다.
전달되지 않을시엔 동기적으로 작동하며, JWT 를 문자열 형태로 리턴합니다.
payload 는 객체, buffer, 혹은 문자열형태로 전달 될 수있습니다.
secret 은 서명을 만들 때 사용되는 알고리즘에서 사용되는 문자열 혹은 buffer 형태의 값 입니다.1
2
3
4var token = jwt.sign(payLoad,tokenKey,{
algorithm : 'HS256', //"HS256", "HS384", "HS512", "RS256", "RS384", "RS512" default SHA256
expiresInMinutes : 1440 //expires in 24 hours
});
토큰 복호화 하기
1 | var jwt = require('jsonwebtoken'); |
참조
nodejs에서 jwt를 사용하기 위한 npm package를 설치하고 이용한다.
Comments