[Node.js] 로그인 유지(1)

Joo Yeong Park·2020년 10월 10일
15

develop

목록 보기
3/8

지금 부딪힌 문제

지금까지 Node.js로 REST API 의 api를 호출하는 식으로 내 토이프로젝트가 진행되고 있었는데 카카오톡 로그인을 구현하다가 문제를 알아버렸다

로그인 문제다 로그인 세션 문제!!

지금까지 한 생각: React가 로컬스토리지랑 세션스토리지있으니까 로그인 세션 여기서 유지해야지~~
지금의 나: ???😱아니야 그거 아니야..

카카오톡 로그인을 하다가 token을 본 순간 깨달았다. 내 서버를 뜯어고쳐야 한다는 것을..

세션과 토큰

서버 기반 인증: Session/Cookie

HTTP Protocol 요청의 특징은 이렇다👇

1. connectionless - 요청에 따른 응답을 받으면 연결이 끊어짐
2. stateless - 통신이 종료되면 상태정보 남지 않음

그렇기 때문에 로그인 후 페이지를 새로 접근하면 로그인 상태가 유지되지 않는다.
이러한 HTTP Protocol 인증 문제를 해결하기 위해 세션/쿠키를 사용한다.

과거의 내 생각이 여기서 기반하는 것인데, 요청할때마다 매번 요청에 계정 정보를 담아서 보낸다는 위험한 생각을 한 것이다!! 보안에 매우 취약한 웹사이트를 만들고 싶다면 이렇게 해도 될듯;(

세션 인증 동작

이렇게 서버가 세션 정보를 유지하면서 클라이언트의 요청에 대한 응답을 한다.

  1. 서버에서 웹 사이트 제공
  2. 사용자 로그인
  3. 서버는 요청(로그인)에 대해 사용자 검증 -> 사용자 고유의 세션 저장소 생성 및 유지
  4. 로그인 요청에 대한 응답과 SessionID 반환
  5. 사용자는 해당 SessionID를 받아 쿠키에 저장한 다음, 인증이 필요한 요청마다 쿠키를 헤더에 포함하여 서버에 요청
  6. 서버는 쿠키를 받아 세션 저장소에서 대조(쿠키검증)
  7. 인증완료되면 요청에 대한 데이터 반환

세션 인증 문제점

  • 저장공간: 서버에서 세션 저장소를 만들어 사용하기 때문에 서버에 추가적인 저장공간이 필요하게 되고 그에따라 부하도 증가하게 된다.

  • 확장성: 세션을 사용하면 서버의 확장(여러개의 프로세스 돌리기/여러 컴퓨터에 분산된 시스템 설계 등)에 어려움이 생긴다.

  • CORS (Cross-Origin Resource Sharing): 단일 도메인 및 서브 도메인에서만 작동하도록 설계된 쿠키는 여러 도메인에서 관리하기 번거롭다.

Token 기반 인증: JWT

Token 기반 인증 방법과 Session 인증의 가장 큰 차이점은 유저의 정보를 서버에 저장하지 않는다는 점이다.

클라이언트의 세션상태를 저장하는게 아니라 필요한 정보만 Token body에 저장해서 클라이언트가 가지고 있고 그것을 증명서처럼 사용하는 방식으로 작동한다.

토큰 인증 동작

1. 서버에서 웹 사이트 제공
2. 사용자 로그인
3. 서버는 계정 검증을 통해 사용자에게 토큰 발급
4. 클라이언트측에서 전달받은 토큰을 저장해두고
5. 서버에 요청할 때 마다 토큰을 함께 서버에 전달
6. 서버는 토큰을 검증하고 요청에 응답

토큰 인증의 특징

  • Stateless 서버

    • 상태를 유지하지 않는다

    • 상태정보를 저장하지 않기 때문에 클라이언트측에서 들어오는 요청만으로 작업을 처리한다.

      👉 세션 인증의 저장 공간 문제, 서버부하 문제 해결
      👉 세션 인증의 확장성 해결 : 클라이언트와 서버간 연결 없어 서버 확장성 향상

  • 인증 정보를 다른 애플리케이션으로 전달

    • OAuth처럼 구글, 카카오 등 소셜 계정 이용하여 다른 웹 서비스에도 로그인을 할 수 있게 한다.
profile
웹 개발자를 꿈꾸는 삐약

4개의 댓글

comment-user-thumbnail
2020년 12월 16일

내용에 있는 이미지 직접 그리신건가요? 진짜 너무 귀여워요.. ㅠㅠ 덕분에 토큰 인증 쏙쏙 이해하고 갑니다!!!

답글 달기
comment-user-thumbnail
2021년 3월 6일

와 ㅋㅋㅋ짱귀엽다.

답글 달기
comment-user-thumbnail
2021년 8월 3일

그림 너무 귀여워요ㅠㅠ 이해가 쏙쏙 되네요! 잘 읽고 갑니다ㅎㅎ

답글 달기
comment-user-thumbnail
2022년 10월 16일

감사합니다..감사합니다..

답글 달기