[기술면접] 컴퓨터 네트워크 : 예상 질문과 답변(Cookie, Session, JWT)

Alice·2023년 9월 20일
0


쿠키 인증 방식에 대해서 설명 부탁드립니다.

쿠키는 클라이언트 브라우저에 저장되는 기록 정보 파일입니다.

  1. 클라이언트가 브라우저를 통해 서버에 요청을 보냅니다.
  2. 서버는 클라이언트측에 저장하고싶은 정보를 응답 헤더의 set-cookie에 담아 보냅니다.
  3. 이후 해당 클라이언트는 서버에 요청을 보낼때마다 매번 저장된 쿠키를 Requset 헤더에 담아 보내게됩니다.

하지만 쿠키 인증 방식은 민감한 정보를 브라우저에 저장하고, 이를 탈취당할 수 있다는 보안상의 약점을 가지고있습니다.


세션 방식과 쿠키 방식의 차이점은 무엇인가요?

세션은 이러한 민감한 정보를 클라이언트 브라우저가 아닌 서버에 저장하는 인증 방식입니다.

  1. 클라이언트가 ID, PW 등의 정보를 바탕으로 로그인을 시도합니다.
  2. 유저의 세션이 서버의 DB에 저장됩니다. 이때 세션을 식별하기위한 세션ID를 기준으로 정보를 저장합니다.
  3. 서버에서 브라우저에게 세션ID를 보내주고, 클라이언트 브라우저의 쿠키에 세션ID를 저장합니다.
  4. 클라이언트는 매 요청마다 쿠키에 세션ID를 가지고 요청을 보내어, 서버는 이 값을 바탕으로 인증을 수행합니다.

세션은 민감한 정보를 서버에서 저장하기에 보안상으로 안전합니다. 하지만 서버에서 세션 저장소를 관리하기 때문에 많은 요청이 들어오면 서버에 부하가 심해집니다.


JWT 인증 방식에 대해서 설명해주세요

JWT기반의 인증은 JWT토큰을 HTTP 헤더에 실어 보내 서버가 클라이언트를 식별하는 방식입니다.

  1. 클라이언트가 ID, PW를 사용하여 서버에 로그인합니다.

  2. 서버가 사용자로부터 인증 요청을 받으면 Header, PayLoad, Signature를 정의합니다.

  3. 만들어진 JWT를 쿠키 헤더에 담아 클라이언트에 전송합니다.

  4. 클라이언트는 서버로부터 받은 JWT를 로컬 스토리지 or 쿠키에 저장합니다.

  5. 클라이언트는 API 요청시 Access Token을 Authorization 헤더에 담아서 보냅니다.

  6. 서버는 서버는 헤더에 담긴 Access Token이 서버에서 발행한 토큰인지 여부를 확인합니다.

  7. Access Token이 만료되었다면, Refresh Token을 사용하여 재발급이 가능합니다.


여기서 Signature 은 Header 와 PayLoad를 각각 Base64로 인코딩하고, 인코딩한 값을 Secret Key를 이용해 Header에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 Base64로 인코딩하여 생성합니다. 공격자는 Secret Key를 알 수 없기에 토큰을 조작할 수 없습니다.


Access Token 만 있으면 되는걸 Refresh Token 까지 있는 이유가 뭔가요?

Access Token만 존재한다면 제 3자에게 탈취당할 경우 보안적인 문제가 심각해집니다. JWT는 발급 후 삭제가 불가능하기 때문에 토큰에 유효기간을 발급하는 방식으로 탈취 문제에 대응합니다. 따라서 비교적 유지 기간이 긴 Refresh Token을 두어 만료된 Access Token을 재발급 해주는 역할을 주고, 유저가 로그아웃 하면 DB에서 Refresh Token을 지워버리는 방식으로 보안상 안정성을 제공합니다. 만약 Access Token과 Refresh Token이 모두 만료된 상태라면 유저는 로그인을 다시해야합니다.


이러한 JWT 인증 방식의 장점과 단점이 무엇인가요?

JWT 방식의 인증은 서버에서 따로 세션을 관리하지 않기때문에 서버의 부담이 적습니다. 또한 세션 기반 인증은 사용자의 정보가 서버에 저장되기에 Stateful 한 특성을 가지지만, JWT는 사용자 정보를 저장하지 않기때문에 Stateless 한 특성을 가져 더 높은 확장성을 가집니다.

하지만 JWT는 서버에서 유저를 상대로 먼저 할 수있는 작업이 없습니다. 세션 인증 방식은 유저 로그인을 끊어버릴 수 있지만, JWT는 이것이 불가능합니다.

profile
꾸준한 습관으로 만드는 내면의 견고함

0개의 댓글