🐾 인증/인가
HTTP통신
쿠키
세션
토큰
정리
[Spring] 쿠키/세션/토큰
인증 방식
🐰 쿠키-세션 방식의 인증
출처: 그랩의 블로그 (https://tansfil.tistory.com/58)
- 사용자가 서버에 웹페이지를 요청할 때, 쿠키 정보를 함께 보낸다.
- 서버는 사용자가 전달한 쿠키에 세션 id가 있는지 확인한다.
- 세션 id가 존재한다면 상태를 유지해주고, 존재하지 않는다면 세션 id를 새로 생성해서 DB에 저장한다.
- 사용자에게 웹페이지를 돌려줄 때, 쿠키에 방금 생성한 세션id 정보를 함께 넣어서 준다.
- 이 쿠키는 요청을 보낸 사용자의 PC에 저장된다.
- 이제 사용자는 다른 요청을 보낼 때, 세션id가 포함된 쿠키를 동봉하게 되고 서버는 세션id로 사용자를 식별하여 사용자의 상태에 알맞게 처리해준다.
- 문제점
- 로그인할 때 쿠키/세션 방식을 사용하면,
해커가 쿠키를 가로채서 치명적인 보안 문제
를 일으킬수도 있고, 서버는 수많은 사용자의 세션을 저장하고 요청이 들어올 때마다 확인 작업을 하느라 서버의 부탐이 커질 수도
있다.
🐰 토큰 기반 인증
🐾 JWT(Json Web Token) : 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격
출처: 그랩의 블로그 (https://tansfil.tistory.com/58)
- 사용자가 로그인 시,
서버는 세션id를 서버에 저장하는 대신 토큰을 발급 해준다.
- 사용자는 발급된 토큰을 PC에 저장한다 (로컬에 저장)
- 사용자는 이후 다른 요청을 보낼 때,
세션id가 포함된 쿠키가 아닌 토큰을 동봉해서 보내게 된다.
- 서버는 사용자의 토큰 정보를 검증한 뒤(복호화 등), 사용자의 권한을 확인하고 인가 요청을 처리한다.
- 쿠키/세션보다 보안성도 높고 서버에게도 효율적인 방식
- 세션처럼 서버에 유저의 정보를 저장할 필요가 없고, 서버는 토큰에 대한 검증(암호화된 토큰을 봉인해제!)만 수행하면 되기 때문에 서버에 부담이 적다
-
보안 피해를 최소화하기 위해 서버는 2가지 종류의 토큰을 사용자에게 발급한다.
Access Token
: "출입증"으로 사용 (보안을 위해 유효기간 짧게 설정)
Refresh Token
: Access Token이 만료되었을 때 인증 상태를 연장, 만료 시에만 노출
되기 때문에, 해킹을 당할 위험이 적다. (유효기간 보다 길게 설정)
-
사용자는 Access Token으로 요청을 보내지만, Access Token의 유효기간이 만료되면 Refresh Token을 서버에 보냄으로써 새로운 Access Token을 발급받을 수 있게 된다.
참고
IT 샐러드 (IT Salad) - 가볍게 즐기는 IT 한 끼