인턴일지

인턴 Day13 (Spring Boot + JWT + Security 정리)

Calice 2022. 5. 3. 13:40

1. 세션 vs 쿠키 vs 토큰

Session

서버와 클라이언트의 연결이 활성화된 상태.

  • 클라이언트가 서버와 통신을 시작하면 서버는 해당 클라이언트에 대해 유일한 값인 세션 id를 부여, 세션 스토리지에 세션 정보를 저장함.
  • 클라이언트는 이 세션id를 쿠키를 통해 기억함.
  • 이후 클라이언트가 어떤 요청을 보낼 때마다 헤더의 cookie에 세션 id를 담아서 전송함.
  • 서버는 클라이언트가 보낸 요청의 쿠키에 담긴 세션 id와 세션 스토리지에 담긴 세션 id를 대조해 인증 상태를 판단함.
  • (즉, 세션과 쿠키는 완전히 분리된 개념이 아니며 세션은 쿠키를 기반으로 함)
  • 각 클라이언트마다 유니크한 세션 객체가 주어지고, 이 세션 객체에 데이터를 담아 관리할 수 도 있음.
  • (세션 객체가 자물쇠로 잠긴 상자라면 세션 id 가 열쇠인 셈)
  • 세션을 사용하지 않고 쿠키만으로 어떤 데이터를 주고받는다면, 클라이언트는 이미 모든 데이터를 알고 있다는 것.

쿠키와 세션은 결국 사용자에게

  1. 절절한 사용자 경험을 제공하고 ('일주일 간 다시 보지 않기', 로그인 유지하기 등)
  2. 보안을 유지하기위해 사용된다.(인증 상태 관리)

Cookie

쿠키는 일종의 서버와 클라이언트가 대화하기 위한 수단.

  • 브라우저가 서버와 연결이 되었을 때 브라우저에서 자동적으로 쿠키를 생성하고, response 할 때 쿠키를 담아서 보낸다.
  • 특정 호스트에서 생성된 쿠키는 이후 모든 요청마다 서버로 전송됨
  • 요청 해더의 set-cookie 속성에 정보를 담을 수 있음.
  • 쿠키에 담긴 데이터는 브라우저에서 관리됨.
  • 이름, 값, 만료 날짜, 경로 정보로 구성.

Token

인증을 위해 사용되는 암호화된 문자열.

  • 사용자가 인증에 성공하면 서버는 토큰을 생성해서 클라이언트로 보낸다.
  • 토큰도 세션과 마찬가지로 사용자가 보내는 요청에 포함이 됨.
  • 세션 인증에서는 서버가 세션 id를 저장하고 클라이언트가 쿠키에 실어 보낸 세션 id와 대조해서 확인하는 반면, 토큰을 사용하면 요청을 받은 서버는 토큰이 유효한지를 확인만 함. http통신의 stateless 한 성격과 더 적합한 인증 방식.
  • 세션 인증에 비해 서버 운영의 효율이 더 좋다.

2. Authentication(인증) VS Authorization(인가)

Authentication: 쉽게 말해 로그인이라 생각하면 된다. 이 사이트에 가입된 회원 이라는 것을 인증 받는 과정.

Authorization: 이후에 여러 서비스를 이용할 때 예를 들면 내 친구들의 목록을 보거나 좋아요를 하거나 등등 내 계정으로 할 수 있는 서비스를 이용하려고 할 때 로그인 되었다는 것을 허가 해주는 것

 

 

3. JWT 구조

- Header(헤더)

- Payload

- Signiture

 

4. 연결과정

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

access token(분, 2-3일) , refresh teken(한달)