
정리된 channels.js






정리된 users.js





"나,, 여기 가입된 유저야!"
쇼핑몰 상품 볼 때? X
쇼핑몰 장바구니 담을 때 O
쇼핑몰 상품 구매
마이 페이지..
인증 후에, 이 친구 혹시 이 페이지 접근 권한 있나? -> 살펴보는게 인가.
세션 : (로그인이 되어 있는) 상태
웹에서 서버와 클라이언트가 주고받는 데이터 중 하나
정확히는 생성은 웹 서버가 해서 웹 브라우저 주면, 브라우저가 자기 메모리에 저장해두고, 다음에 같은 웹서버 방문할 때 쿠키 들고 요청하러 감.
1) 로그인 -> 서버가 쿠키를 구워줘요.
2) 사용자 <-> 서버가 쿠키를 핑퐁 (나 로그인 했었어!)
장점 : 서버에 저장이 x, 서버 저장 공간 아낄 수 o, stateless -> RESTful
단점 : 보안에 취약
Cookie에 중요한 정보를 담지 말고, 중요한 정보는 서버에 저장해두고, 그 정보가 어딨는지 주소만 적어서 Cookie에 담자!
쿠키에 넣어서 보내기엔 너무 중요한 내용은 서버가 가진 금고(Session)에 넣어 두고, 그 금고 번호(Session ID)만 쿠키에 넣어 통신함.
1) 로그인 -> 서버가 금고를 만들어서, 정보 저장 그 금고 번호를 줘요
2) 사용자<->서버가 번호만 가지고 대화
장점 : 보안 강해짐
단점 : 서버가 저장 O => 서버 저장 공간, Stateless X
보안에 취약한 점과 Stateless(상태 저장하지 않음)의 단점을 보완하여 나온 것 : JWT
개념 : json 형태의 데이터를 안전하게 전송하기 위한 웹에서 사용하는 토큰
= 토큰을 가진 사용자가 "증명"을 하기 위한 수단
cf. 토큰 : (인증용) 입장 가능한 유저야. / (인가용) 관리자 권한 & 일반 유저 권한을 구분하는..
장점
cf. 토큰을 발행하는 서버를 따로 만들어줄 수도 있음.

header : 무슨 암호화 알고리즘을 사용했는지, type이 어떤 타입인지
payload : 내가 보내는 data 부분
signature : 그래서 앞의 내용을 이렇게 보증한다는 뜻 (데이터를 바꿀 시, 서명값도 signature가 바뀌어져 들어옴. 바뀐 보증값을 서버는 받아주지 않음 - 보안용)

$ npm install jsonwebtoken 한 후

결과

iat : 토큰이 생성된 시간. 따라서 같은 내용으로 토큰 생성을 해도 생성시간이 바뀌므로 토큰의 글자는 바뀌게 된다.
.env = environment : 환경 변수 "설정 값"
파일 확장자가 : .env
cf. .txt, .jpg..
설치해보자
$ npm install dotenv 하기
.env 파일은 환경 변수 파일 -> 프로젝트 최상위 패키지에 존재!
.env 파일에 중요한 값을 넣어놓고 코드를 정리해보자


라는 식으로 활용할 수 있다.
users.js

users.js에 모듈 추가



쿠키에다가 담아서 줘야하는데 (header)에다가
근데 일단 body값에다가 담았을 때 띄워지는지 확인하려고 postman에서 확인

cookie에다가(header)에다가 토큰 값을 보내주기 위해
res.cookie("token", token); 코드 추가.
body값에서 보내는 res.json({token : "token";}); 줄 삭제,
else{}문의 접근 제한 의미를 가지고 있는 status코드 404에서 403으로 수정.

Secure
HTTP
http://localhost:1234/login
HTTPS(Secure)
https://www.naver.com
cf.httpOnly(= 프론트엔드가 아니라 API호출"만" 허락할거니?)
: XSS 공격(프론트엔드 공격 : 웹 브라우저 js 접근 => 공격)
그래서 httpOnly 설정을 false가 아닌 true로 바꾸는 코드를 작성할 것
코드

결과

유효기간을 설정해줘야 한다

누가 토큰을 발행했는지도 알 수 있다
콘솔에 토큰을 찍어보고 jwt.io에서 내 토큰 정보를 확인해보자

exp(expiration)이 나와있고
30분 뒤로 설정이 되어있다.

이제 권한 확인, 인증/인가 등을 내용을 고민하며.. 프로젝트를 완성해 볼 것.