1. 쿠키와 세션
쿠키(Cookie) : 브라우저가 서버로서 사용자가 서버로부터 Set-Cookie라는 헤더로 데이터를 전달 받았을 때
해당 데이터를 브라우저 내에 저장을 한 뒤에 다음부터 서버를 요청하는 모든 해당하는 쿠키를 포함해서 전달
- 데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약하다
세션(Session) : 데이터를 서버에서만 저장하기 때문에 보안에 좋다
다만 사용자가 많은 경우 서버에 저장해야 할 데이터가 많아져서 서버 컴퓨터 부하가 심해질 수 있다.
2. JWT
- JSON 현태의 테이터를 안전하게 교환하여 사용할 수 있게 해준다.
- 인터넷 표준으로서 자리잡은 규격
- 여러가지 암호화 알고리즘을 사용 할 수 있다.
- header.payload.signature 의 형식으로 3가지의 데이터를 포함
https://jwt.io/ 에서 확인 할 수 있다.
- header 는 signature에서 어떤 암호화를 사용하여 생성된 데이터인지 표시
- payload 는 개발자가 원하는 데이터를 저장
- signature 는 정상적인 토큰인지 확인
2-1. JWT의 특성
- 암호 키를 모르더라도 복호화가 가능(변조만 불가능)
- 민감한 정보는 담지 않아야 한다(개인정보, 비밀번호 등...)
- 특정 언어만 사용 가능한게 아니라 어디서든 사용가능
2-2. 쿠키, 세션과의 차이점
데이터를 교환하고 관리하는 방식과는 달리, JWT는 단순하게 데이터를 표현하는 방식
JWT로 만든 데이터를 브라우저로 보내도 쿠키처럼 자동으로 저장되지는 않지만, 변조가 거의 불가능하고
서버에 데디터를 저장하지 않기 때문에 서버를 Stateless(무상태)로 관리할 수 있기 때문에 최근에 많이 사용함
- Stateless(무상태) : 서버가 죽었다 살아나도 똑같은 동작일 경우
- Stateful(상태 보존) : 서버가 죽었다 살아났는대 조금이라도 동작이 다른 경우
※ 로그인 정보를 서버에 저장하게 되면 무조건 Stateful(상태 보존) 이라고 볼 수 있다.
3. JWT 사용 방법
jsonwebtoken 라이브러리 사용
3-1. 모듈 설치
npm init -y
npm i jsonwebtoken -S
3-2. 암호화
const jwt = require("jsonwebtoken");
const token = jwt.sign({ myPayloadData: 1234 }, "mysecretkey");
console.log(token);
3-3. 복호화
const decodeToken = jwt.decode(token);
console.log(decodeToken);
3-4. 데이터 검증
const verifyToken = jwt.verify(token, "mysecretkey");
console.log(verifyToken);
4. Access Token, Refresh Token
Access Token - 사용자의 권한이 확인 되었을 경우 해당 사용자를 인증하는 되었다는 용도
Refresh Token - 특정한 사용자가 Access Token을 발급받을 수 있게 하기 위한 용도
'코딩캠프 > 내일배움캠프' 카테고리의 다른 글
[ TIL ] 12.22(목) 29일차 (0) | 2022.12.22 |
---|---|
[ TIL ] 12.21(수) 28일차 (1) | 2022.12.21 |
[ TIL ] 12.19(월) 26일차 (0) | 2022.12.19 |
[ WIL ] 12.12~16 5주차 (0) | 2022.12.19 |
[ TIL ] 12.16(금) 25일차 (0) | 2022.12.16 |