[Spring] 인증 방식(쿠키-세션, 토큰)

지인·2023년 6월 22일
0

Spring

목록 보기
2/20

🐾 인증/인가 HTTP통신 쿠키 세션 토큰 정리
[Spring] 쿠키/세션/토큰

인증 방식


🐰 쿠키-세션 방식의 인증

세션
출처: 그랩의 블로그 (https://tansfil.tistory.com/58)

  1. 사용자가 서버에 웹페이지를 요청할 때, 쿠키 정보를 함께 보낸다.
  2. 서버는 사용자가 전달한 쿠키에 세션 id가 있는지 확인한다.
  3. 세션 id가 존재한다면 상태를 유지해주고, 존재하지 않는다면 세션 id를 새로 생성해서 DB에 저장한다.
  4. 사용자에게 웹페이지를 돌려줄 때, 쿠키에 방금 생성한 세션id 정보를 함께 넣어서 준다.
  5. 이 쿠키는 요청을 보낸 사용자의 PC에 저장된다.
  6. 이제 사용자는 다른 요청을 보낼 때, 세션id가 포함된 쿠키를 동봉하게 되고 서버는 세션id로 사용자를 식별하여 사용자의 상태에 알맞게 처리해준다.
  • 문제점
    • 로그인할 때 쿠키/세션 방식을 사용하면, 해커가 쿠키를 가로채서 치명적인 보안 문제를 일으킬수도 있고, 서버는 수많은 사용자의 세션을 저장하고 요청이 들어올 때마다 확인 작업을 하느라 서버의 부탐이 커질 수도 있다.

🐰 토큰 기반 인증

🐾 JWT(Json Web Token) : 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격

토큰
출처: 그랩의 블로그 (https://tansfil.tistory.com/58)

  1. 사용자가 로그인 시, 서버는 세션id를 서버에 저장하는 대신 토큰을 발급 해준다.
  2. 사용자는 발급된 토큰을 PC에 저장한다 (로컬에 저장)
  3. 사용자는 이후 다른 요청을 보낼 때, 세션id가 포함된 쿠키가 아닌 토큰을 동봉해서 보내게 된다.
  4. 서버는 사용자의 토큰 정보를 검증한 뒤(복호화 등), 사용자의 권한을 확인하고 인가 요청을 처리한다.
  • 쿠키/세션보다 보안성도 높고 서버에게도 효율적인 방식
    • 세션처럼 서버에 유저의 정보를 저장할 필요가 없고, 서버는 토큰에 대한 검증(암호화된 토큰을 봉인해제!)만 수행하면 되기 때문에 서버에 부담이 적다
  • 보안 피해를 최소화하기 위해 서버는 2가지 종류의 토큰을 사용자에게 발급한다.

    • Access Token : "출입증"으로 사용 (보안을 위해 유효기간 짧게 설정)
    • Refresh Token : Access Token이 만료되었을 때 인증 상태를 연장, 만료 시에만 노출되기 때문에, 해킹을 당할 위험이 적다. (유효기간 보다 길게 설정)
  • 사용자는 Access Token으로 요청을 보내지만, Access Token의 유효기간이 만료되면 Refresh Token을 서버에 보냄으로써 새로운 Access Token을 발급받을 수 있게 된다.


참고

IT 샐러드 (IT Salad) - 가볍게 즐기는 IT 한 끼

profile
열쩡

0개의 댓글