지식 수준 맞추기
- Node.js는 프로그래밍 언어가 아니라 실행 플랫폼
- npm은 패키지 관리 프로그램이다.
- express는 오픈소스 라이브러리
- HTTP는 일반적으로 데이터를 주고 받을 때 사용되는 통신 규약
- 웹 브라우저 : HTML로 이루어진 데이터를 읽어서 화면에 그려주는 역활
- 쿠키 : 웹브라우저에 상태를 저장 -> req에 항상 쿠키 데이터를 가지고 있음
- 세션 : 쿠키의 특성을 이용한 기술 -> 서버에 부하가 큼
JWT
- json형태의 데이터를 안전하게 교환하여 사용할 수 있게 해주는 규격?
- header.payload.signature -> 항상 2개의 . 이 포함된 데이터
- signature에서 어떤 암호화를 사용하여 생성된 데이터인지 표현
payload
signature
- 토큰이 변조되지 않는 정상적인 토큰인지 확인하는
특성
- 암호 키를 모르더라도 복호화가 가능하다.-> 누구든지 볼수 있다는 장,단점 존재
- 민감한 정보는 담지 않도록 해야한다.
쿠키,세션과 JWT 차이점
- JWT는 단순히 데이터를 표현하는 형식. 쿠키/세션 = 데이터를 교환하고 관리하는
사용법
- 오픈소스 라이브러리를 이용
- 암호화된 데이터는 쿠키,로컬스토리지에 저장 api요청을 할때 서버가 요구하는 양식에 맞게 보내주어 인증을 시도.
- 회원가입, 로그인, 로그인 확인, 내정보 조회에 사용됨 => 특정 사용자 정보에 접근
Access Token, Refresh Token
Access Token
- jwt데이터를 사용하여 특정사용자인걸 인식하는 -> 토큰에 인증을 해주는 -> 사용자 권한 확인.
- Stateless -> 사용자 인증 여부는 확인가능 하지만 처음 발급한 사용자 본인인지 확인 불가.
- 토큰 탈취시 위험함
Refresh Token
- 인증 정보를 서버가 가지고 특정 저장소,db에 저장하여 관리
- 특정 token 만료가 필요 할때 저장소에서 token삭제
- Refresh Token을 거쳐서 Access Token을 발급 -> 피해를 최소화 하기 위해서
- 짧은 시간 동안만 인증을 허락해주는.
Refresh Token api
Refresh Token은 최초로 발급 받고 짧은 만료시간을 가지는 Access Token을 발급 받음
- Refresh Token, Access Token 발금 - get
- token 인증받기 - get
미들웨어
- 미들웨어란? req -> middleware-> app -> res : 모든 요청에 공통적 처리를 할 때 ex)로깅, 인증등 공통적으로 작동하는 작업을 공통적으로 관리
미들웨어 작성
app.use((req,ews,next) => {
//필요한 코드
})
next : 미들웨어를 거치고 다음것을 실행 -> 다음 스택으로 정의된 미들웨어를 호출