인턴일지
인턴 Day13 (Spring Boot + JWT + Security 정리)
Calice
2022. 5. 3. 13:40
1. 세션 vs 쿠키 vs 토큰
Session
서버와 클라이언트의 연결이 활성화된 상태.
- 클라이언트가 서버와 통신을 시작하면 서버는 해당 클라이언트에 대해 유일한 값인 세션 id를 부여, 세션 스토리지에 세션 정보를 저장함.
- 클라이언트는 이 세션id를 쿠키를 통해 기억함.
- 이후 클라이언트가 어떤 요청을 보낼 때마다 헤더의 cookie에 세션 id를 담아서 전송함.
- 서버는 클라이언트가 보낸 요청의 쿠키에 담긴 세션 id와 세션 스토리지에 담긴 세션 id를 대조해 인증 상태를 판단함.
- (즉, 세션과 쿠키는 완전히 분리된 개념이 아니며 세션은 쿠키를 기반으로 함)
- 각 클라이언트마다 유니크한 세션 객체가 주어지고, 이 세션 객체에 데이터를 담아 관리할 수 도 있음.
- (세션 객체가 자물쇠로 잠긴 상자라면 세션 id 가 열쇠인 셈)
- 세션을 사용하지 않고 쿠키만으로 어떤 데이터를 주고받는다면, 클라이언트는 이미 모든 데이터를 알고 있다는 것.
쿠키와 세션은 결국 사용자에게
- 절절한 사용자 경험을 제공하고 ('일주일 간 다시 보지 않기', 로그인 유지하기 등)
- 보안을 유지하기위해 사용된다.(인증 상태 관리)
Cookie
쿠키는 일종의 서버와 클라이언트가 대화하기 위한 수단.
- 브라우저가 서버와 연결이 되었을 때 브라우저에서 자동적으로 쿠키를 생성하고, response 할 때 쿠키를 담아서 보낸다.
- 특정 호스트에서 생성된 쿠키는 이후 모든 요청마다 서버로 전송됨
- 요청 해더의 set-cookie 속성에 정보를 담을 수 있음.
- 쿠키에 담긴 데이터는 브라우저에서 관리됨.
- 이름, 값, 만료 날짜, 경로 정보로 구성.
Token
인증을 위해 사용되는 암호화된 문자열.
- 사용자가 인증에 성공하면 서버는 토큰을 생성해서 클라이언트로 보낸다.
- 토큰도 세션과 마찬가지로 사용자가 보내는 요청에 포함이 됨.
- 세션 인증에서는 서버가 세션 id를 저장하고 클라이언트가 쿠키에 실어 보낸 세션 id와 대조해서 확인하는 반면, 토큰을 사용하면 요청을 받은 서버는 토큰이 유효한지를 확인만 함. http통신의 stateless 한 성격과 더 적합한 인증 방식.
- 세션 인증에 비해 서버 운영의 효율이 더 좋다.
2. Authentication(인증) VS Authorization(인가)
Authentication: 쉽게 말해 로그인이라 생각하면 된다. 이 사이트에 가입된 회원 이라는 것을 인증 받는 과정.
Authorization: 이후에 여러 서비스를 이용할 때 예를 들면 내 친구들의 목록을 보거나 좋아요를 하거나 등등 내 계정으로 할 수 있는 서비스를 이용하려고 할 때 로그인 되었다는 것을 허가 해주는 것
3. JWT 구조
- Header(헤더)
- Payload
- Signiture

4. 연결과정

- 클라이언트가 아이디와 비밀번호를 서버에게 전달하며 인증을 요청한다.
- 서버는 아이디와 비밀번호를 통해 유효한 사용자인지 검증하고, 유효한 사용자인 경우 토큰을 생성해서 응답한다.
- 클라이언트는 토큰을 저장해두었다가, 인증이 필요한 api에 요청할 때 토큰 정보와 함께 요청한다.
- 서버는 토큰이 유효한지 검증하고, 유효한 경우에는 응답을 해준다.
access token(분, 2-3일) , refresh teken(한달)