지금까지 Node.js로 REST API 의 api를 호출하는 식으로 내 토이프로젝트가 진행되고 있었는데 카카오톡 로그인을 구현하다가 문제를 알아버렸다
로그인 문제다 로그인 세션 문제!!
지금까지 한 생각: React가 로컬스토리지랑 세션스토리지있으니까 로그인 세션 여기서 유지해야지~~
지금의 나: ???😱아니야 그거 아니야..
카카오톡 로그인을 하다가 token을 본 순간 깨달았다. 내 서버를 뜯어고쳐야 한다는 것을..
HTTP Protocol 요청의 특징은 이렇다👇
1. connectionless - 요청에 따른 응답을 받으면 연결이 끊어짐
2. stateless - 통신이 종료되면 상태정보 남지 않음
그렇기 때문에 로그인 후 페이지를 새로 접근하면 로그인 상태가 유지되지 않는다.
이러한 HTTP Protocol 인증 문제를 해결하기 위해 세션/쿠키를 사용한다.
과거의 내 생각이 여기서 기반하는 것인데, 요청할때마다 매번 요청에 계정 정보를 담아서 보낸다는 위험한 생각을 한 것이다!! 보안에 매우 취약한 웹사이트를 만들고 싶다면 이렇게 해도 될듯;(
이렇게 서버가 세션 정보를 유지하면서 클라이언트의 요청에 대한 응답을 한다.
저장공간: 서버에서 세션 저장소를 만들어 사용하기 때문에 서버에 추가적인 저장공간이 필요하게 되고 그에따라 부하도 증가하게 된다.
확장성: 세션을 사용하면 서버의 확장(여러개의 프로세스 돌리기/여러 컴퓨터에 분산된 시스템 설계 등)에 어려움이 생긴다.
CORS (Cross-Origin Resource Sharing): 단일 도메인 및 서브 도메인에서만 작동하도록 설계된 쿠키는 여러 도메인에서 관리하기 번거롭다.
Token 기반 인증 방법과 Session 인증의 가장 큰 차이점은 유저의 정보를 서버에 저장하지 않는다는 점이다.
클라이언트의 세션상태를 저장하는게 아니라 필요한 정보만 Token body에 저장해서 클라이언트가 가지고 있고 그것을 증명서처럼 사용하는 방식으로 작동한다.
1. 서버에서 웹 사이트 제공
2. 사용자 로그인
3. 서버는 계정 검증을 통해 사용자에게 토큰 발급
4. 클라이언트측에서 전달받은 토큰을 저장해두고
5. 서버에 요청할 때 마다 토큰을 함께 서버에 전달
6. 서버는 토큰을 검증하고 요청에 응답
Stateless 서버
상태를 유지하지 않는다
상태정보를 저장하지 않기 때문에 클라이언트측에서 들어오는 요청만으로 작업을 처리한다.
👉 세션 인증의 저장 공간 문제, 서버부하 문제 해결
👉 세션 인증의 확장성 해결 : 클라이언트와 서버간 연결 없어 서버 확장성 향상
인증 정보를 다른 애플리케이션으로 전달
내용에 있는 이미지 직접 그리신건가요? 진짜 너무 귀여워요.. ㅠㅠ 덕분에 토큰 인증 쏙쏙 이해하고 갑니다!!!