인증 vs 인가, Session vs JWT

이준영·2023년 12월 26일
post-thumbnail

1. 인증 vs 인가

인증(Authentication) : 웹사이트에서 사용자 정보를 입력하여 로그인하는 것
인가(Authorization) : 로그인을 한 뒤 로그인 상태가 유지되도록 권한을 부여하는 것

이때, 로그인 상태를 유지시키는 기술이 세션과 JWT이다.

2. Session

세션 작동 방식

  1. 클라이언트 -> 서버 : 로그인
  2. 서버 : 세션 객체 생성
  3. 서버 -> 클라이언트 : 세션 쿠키 생성(세션 ID 저장)

세션 객체

세션 객체는 클라이언트의 상태 정보를 저장하는데 사용된다. 이 객체는 서버 메모리에 생성되거나 데이터베이스, 분산 캐시 등의 백엔드 스토리지에 저장될 수 있다.

  • 서버 메모리에 세션 저장 : 서버가 재시작되거나 메모리가 초기화 되면 세션 소멸
  • 데이터베이스에 세션 저장 : 만료 기간을 설정하여 해당 기간이 지나면 세션 삭제
  • 분산 캐시에 세션 저장 : 분산 캐시에서 지원하는 만료 기능을 사용하여 만료 기간을 설정, 만료 기간이 지나면 삭제

세션 쿠키

쿠키의 유형에는 영구 쿠키와 세션 쿠키가 있다.
세션을 활용하는 경우 세션 ID를 세션 쿠키에 담아서 통신하기 때문에 세션과 쿠키는 서로 반대되는 개념이 아니라 세션이 쿠키를 사용하는 방식이다.

세션 장단점

장점
1. 클라이언트에는 세션 ID만 저장되고 실제 데이터는 서버에 저장되므로 보안성이 높다.
2. 대부분 웹 프레임워크에서 세션 관리를 쉽게 제공하여 서버에서 편리하게 관리할 수 있다.

단점
1. 많은 사용자가 동시에 세션을 유지하면 서버 메모리 사용량이 증가
2. 대규모 시스템에서 서버 간 세션 공유 및 동기화 등 문제로 서버 확장성에 제약

3. JWT(JSON Web Token)

JWT 구성

  • header : 토큰의 타입(jwt), 데이터 서명 방식
  • payload : 전달되는 데이터
  • signature : 헤더와 페이로드의 전자서명

JWT 홈페이지에서 Encode/Decode 해 볼 수 있다.
https://jwt.io/

JWT 작동 방식

  1. 클라이언트 -> 서버 : 로그인
  2. 서버 : JWT 생성(Header 구성, Payload 구성, 서명)
  3. 서버 -> 클라이언트 : 쿠키 생성(JWT 저장)

JWT 장단점

장점
1. JWT는 클라이언트에 저장되므로 서버에 상태를 저장할 필요가 없어 서버 확장성이 향상
2. 다양한 플랫폼과 언어에서 지원되며 서로 다른 시스템 간에 사용이 용이

단점
1. 토큰 탈취 시 토큰에 포함된 정보가 노출 될 수 있음
2. 매 요청 시 디코딩, 토큰 만료 확인, 재발급 처리 등 추가적인 메커니즘 필요

JWT 보안

  • JWT의 payload는 단순히 정보를 base64 encode 하였기 때문에 decode를 통한 정보 노출 유의(민감한 정보는 포함하지 않도록 해야 함)
  • HTTPS를 통해 데이터가 암호화되어 전송되도록하여 토큰 탈취 방지
  • HttpOnly 속성 사용하여 JavaScript에서 쿠키에 접근하지 못하게 설정
  • 토큰이 길게 사용되지 않도록 만료 시간(exp) 설정

4. 결론

서버 확장성을 고려했을 때 JWT 방식이 간편하지만 보안에 유의해야한다.

그래서 Access Token과 Refresh Token을 함께 사용하는 방식이 있다.
Refresh Token은 만료시간을 Access Token 보다 길게 하여 DB에 추가로 저장한다.

작동 방식

  1. 클라이언트 -> 서버 : 로그인
  2. 서버 : Access Token, Refresh Token 생성
  3. 서버 -> 클라이언트 : 쿠키 생성(Access Token, Refresh Token 저장)
  4. 클라이언트 : Access Token을 사용하여 서버에 요청
  5. 클라이언트 : Access Token 만료 시 Refresh Token을 사용하여 재발급 요청
  6. 클라이언트 : Refresh Token 만료 시 재로그인
profile
환영합니다!

0개의 댓글