일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 구로파티룸
- 개발자
- 광명파티룸
- 서울파티룸
- 옥길그릭요거트
- 착한코딩
- 스컬킹
- MBTI
- 옥길파티룸
- 스컬킹점수계산
- 보드게임점수
- 코딩
- 옥길동요거트
- 가장존경하는인물
- 스페이스우일
- 보드게임점수계산
- 옥길요거트
- 웹개발
- 스컬킹점수
- 부천파티룸
- 존경하는위인
- 옥길동파티룸
- 그릭요거트
- 일
- 해외여행
- 휴식
- 파티룸
- 취미
- mysql
- 부천공간대여
- Today
- Total
SIMPLE & UNIQUE
JWT(JSON Web Token)/npm jsonwebtoken 본문
jwt.js
(git에 추적되지 않게 .gitignore 파일에 등록하고, 파일은 ftp로 직접 서버에 올려서 관리한다.)
let jwtObj = {};
//비밀키 세팅
jwtObj.secret = "sdf8i3dsklk33ksd"
module.exports = jwtObj
암호화 복호화 modules.js
let jwt = require("jsonwebtoken");
let secretObj = require("../ignorefile/jwt");
//암호화
let token1 = jwt.sign({
email: userid // 토큰의 내용(payload)
},
secretObj.secret , // 비밀 키
{
expiresIn: '60m' // 유효 시간은 60분
})
//복호화
let decoded1 = jwt.verify(token1, secretObj.secret);
로그인 세션 유지를 위해 cookie값으로 jwt를 사용하였다.
https://www.npmjs.com/package/jsonwebtoken
데이터 구조를 보면
Header에 데이터 타입과 암호화 알로리즘정보
Payload에 데이터 내용(위 코드에서는 email)
Signature에는 서명이 들어간다.
위 코드를 실행하면 토큰이 정상적으로 발행된다.
그런데 발행된 토큰을 아래 사이트에 입력하면 비밀키를 입력하지 않아도 복호화 된다.
결론적으로, header와 payload를 암호화되지 않는다. 이 영역은 단순히 Base64 URL Encoding 된다.
비밀키의 역할은 signature영역을 암호화하여, 전달된 토큰이 신뢰할 수 있는지 확인하는 것이다.
해커가 payload안에 있는 데이터를 알아도, 서명을 모르기 때문에 사이트에서 발행하는 토큰을 그대로 재현할 수 없다.
payload 안에 데이터도 암호화한다면 더욱 좋겠지만, 이 정도 수준으로도 쿠키값을 만들어 로그인을 하려는 시도는 막을 수 있을 것 같다.
가공되어 있는 쿠키값을 가져간다면 로그인처리가 가능하겠지만, 쿠키 세팅시 httponly 옵션을 주면 사이트 밖에서 쿠기를 가져가려는 요청을 막을 수 있다. (아래 링크참고)
https://leejungyeoul.tistory.com/76?category=649935
'React & Node > Guide' 카테고리의 다른 글
1. create-react-app/EC2배포/ssh sftp 접속 (0) | 2019.11.15 |
---|---|
node server/npm mysql/connection pool 구현 (0) | 2019.11.06 |
USER 정보 로그인 세션관리/react-cookies/jsonwebtoken (0) | 2019.11.05 |
콜백 함수/promise (2) | 2019.10.28 |
React.js, Node.js 서버 디렉터리 정의 (0) | 2019.10.24 |