[Node.js] 로그인, 인증 기능 with JWT(1)

Hyun·2023년 8월 8일
0

nodejs

목록 보기
7/19

1. Stateless란?

Client가 Server에게 "나는 123이야"라고 말해도 나중에 다시 서버에게 물어도 서버는 누군지 모른다.
=> HTTP는 Stateless 이기 때문

Why?
1) 성능문제 - 각 요청에 대한 연결을 재설정 하는데 소요되는 시간/대역폭을 최소화 하기 위해

2. 인증 및 인가 절차 기본 흐름

1) Client가 "안녕, 나는 123이야"라고 전달
2) 서버는 유저정보를 포함하는 토큰을 생성
3) 클라이언트에 토큰을 보냄
4) 클라이언트에서 토큰을 저장(쿠키 or LocalStoragy)
5) 나중에 토큰과 함께 요청을 보냄
6) 서버가 토큰을 복호화해서 유저 정보를 알게됨

=> 이제는 Stateful이 된다.

3. JWT

토큰을 생성할때는 JWT라는 모듈을 사용한다.

1) JWT란?

1) JWT는 당사자간에 정보를 JSON 개체로 안전하게 전송하기 위한 독립적인 방식을 
정의하는 개방형 표준이다.
2) 디지털 서명이되어 있으므로 확인하고 신뢰 할 수 있다.
=> 정보를 안전하게 전할 때 혹은 유저의 권한 같은 것을 체크를 핟기 위해서 사용하는데 유용한 모듈

2) JWT 구조

Header + Payload + Verify Signature 로 구성

1. Header: 토큰에 대한 메타 데이터를 포함(타입,해싱 알고리즘)
2. Payload: 유저 정보, 만료 기간, 주제 등
3. Verify Signature: 토큰이 보낸 사람에 의해 서명 되었으며 어떤 식으로든 변경되지 않았는지 
확인하는데 사용되는 서명(헤더 및 페이로드 세그먼트, 서명 알고리즘, 비밀 또는 공개 키를 사용하여 생성)

3) 작동 방식 Example

1. Admin만 볼 수 있는 글을 보고자 할 때, Admin 유저가 보고자 할 때
2. 요청을 보낼 때 보관하고 있던 Token을 Header에 넣어서 같이 보내줌
3. 서버에서는 JWT를 이용해서 Token을 다시 생성한 후 두개를 비교
4. 통과가 되면 Admin 유저가 원하는 글을 볼 수 있음

1개의 댓글

comment-user-thumbnail
2023년 8월 8일

정보 감사합니다.

답글 달기