2019. 9. 17. 10:20

1. 기본개념

1-1. 쿠키, 세션

- 쿠키

'키-값'의 쌍의 형식으로 웹사이트에 접속할 때 자동적으로 만들어지는 임시 파일.

1. 서버는 요청에 대한 응답으로 유저가 본 내용, 세션아이디(ID),  IP 주소 등의 정보를 쿠키에 담아 클라이언트에게 보냄

2. 서버로 부터 쿠키가 오면 웹 브라우저는 쿠키를 저장하고 클라이언트가 요청할 때마다 쿠키를 동봉해서 보냄

3. 서버는 요청에 들어있는 쿠키를 읽어서 사용자가 누구인지 파악

 

- 세션

방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료함으로써 연결을 끝내는 시점동안
같은 사용자(정확하게는 브라우저)로 부터 들어오는 
일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술.

즉, 방문자가 웹서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라고 칭함.

 

- 세션 기반 인증 시스템

: 서버가 세션저장소(서버의 메모리, 디스크, 데이터베이스)에 사용자 정보를 저장함으로써 사용자가 로그인 중임을 기억하는 방식.

1. 유저가 처음 로그인하면 서버는 세션 저장소에 사용자의 정보를 조회하고 response-header field인 set-cookie 값으로 클라이언트 식별자인 session-id(임의의 긴 문자열)를 발행

2. 발행된 session-id는 세션 저장소와 쿠키에 저장

3. 이후 유저가 다른 요청을 보낼 때마다 쿠키에 담긴  session-id를 가지고 서버의 세션 저장소에서 세션을 조회한후 로그인 여부를 결정하여 작업을 처리하고 응답함

 

- 세션기반인증시스템 단점

1. 서버를 확장하기가 번거로워짐

: 서버의 인스턴스가 여러개가 되면, 모든 서버끼리 같은 세션을 공유해야 하므로 세션 전용 DB를 만들어야 하고 신경 쓸 것이 많아짐

 

1-2. 토큰

- 토큰 

: 로그인 이후 서버가 만들어 주는 문자열. 

문자열 안에는 사용자의 로그인 정보와 토큰이 서버에서 발급 되었음을 증명하는 서명이 들어있음.

서명 데이터는 해싱 알고리즘으로 만들어지고 서명이 있음으로 토큰의 무결성(정보가 변경되거나 위조되지 않음)을 보장.

 

- JWT

: Json Web Token, 데이터가 JSON형식으로 이루어진 토큰

 

- 토큰 기반 인증 시스템

1. 클라이언트가 로그인을 하면 서버에서 클라이언트에게 해당 사용자의 정보를 지니고 있는 토큰을 발급받음

2. 추후 클라이언트가 다른 API를 요청할 때 마다 발급받은 토큰을 포함

3. 서버는 토큰이 유효한지 검사하고 결과에 따라 작업을 처리하고 응답

4. 기한이 만료되면 토큰을 지우고 재로그인 하게 함

 

- 토큰 기반 인증 시스템 장점

클라이언트가 로그인 상태를 지닌 토큰을 가지고 있으므로

1. 서버에서 사용자 로그인 정보를 기억하기 위해 사용하는 리소스가 적다

2. 서버의 인스턴스가 늘어나도 서버끼리 사용자의 로그인 상태를 공유할 필요가 없으므로 서버의 확장성이 높음

 

-토큰 기반 인증 시스템 단점

1. 토큰 수명이 짧으면 토큰기한이 만료될 때마다 다시 로그인 해야됨

2. 토큰 수명이 길면 클라이언트의 토큰이 해독되어 악용되는 보안의 문제

1-3. 세션기반인증시스템과 토큰기반인증시스템 공통점과 차이점

- 공통점

1. 클라이언트가 고유 식별자(세션아이디, 토큰)을 갖고 그 식별자를 바탕으로 인증을 처리

 

- 차이점

1. 세션기반인증시스템에서는 식별자에 대한 정보를 서버의 세션저장소에 저장

 

2. User 스키마/모델

2-1. 모델

 

 

2-2

 

Posted by yongminLEE