-
클라이언트와 서버 간의 데이터를 안전하게 전송하기 위해 사용되는 토큰 기반 인증 방식이다.
JWT
- JWT는 JSON 형식의 웹 토큰으로, 주로 사용자 인증과 정보 교환에 사용된다.
- 서버와 클라이언트 간의 요청/응답에 사용자 정보를 포함시켜 안전하게 데이터를 전달한다.
- 자체 서명을 포함하여 데이터의 무결성을 보장한다.
- 예시
- RESTful API 인증
- JWT는 상태를 유지하지 않아 RESTful API와 같은 무상태 환경에서 사용자 인증 처리하는데 유용하다.
- OAuth 2.0
- OAuth 2.0 인증 시스템에서 액세스 토큰으로 자주 사용된다.
- RESTful API 인증
구조
헤더(Header)
- JWT가 어떤 방식으로 서명되어 있는지 메타데이터를 포함한다.
- 토큰의 타입과 해싱 알로리즘 정보를 가지고 있다.
페이로드(Payload)
- JWT의 본문에 해당된다.
- 실제 데이터를 담고 있다.
- 사용자의 정보나 권한등을 포함한다.
서명(Signature)
- 헤더와 페이로드를 특정 비밀 키로 서명한 값이다.
- JWT의 무결성을 검증한다.
- 변조를 방지하는 역할을 한다.
header.payload.signature
특징
- 무상태 인증
- JWT는 서버에 상태를 저장하지 않는다.
- 서버는 JWT를 발급할 때 그 내용은 클라이언트에게 전달되고 이후 클라이언트가 요청할 때 JWT를 다시 서버로 보내어 인증 받는다.
- 서버는 클라이언트의 상태를 관리할 필요가 없다.
- 자체 서명
- JWT는 성명된 토큰이기 때문에 데이터 변조를 방지한다.
- 서명을 검증하여 데이터가 변조되지 않았는지 확인한다.
장점
- 확장성
- 서버가 상태를 저장하지 않는다.
- 서버가 여러 대일 경우 상태를 공유할 필요도 없다.
- 보안성
- 서명을 통해 변조를 방지한다.
- 유연성
- 다양한 서비스 간 인증 정보를 공유할 수도 있다.
- 서버가 저장을 관리할 필요가 없다.
단점
- 토큰 탈취 위험
- JWT는 클라이언트가 보관하기 때문에 토큰이 탈취당할 수 있다.
- HTTS를 사용하거나 토큰 만료 시간을 짧게 설정하고 리프레시 토큰을 사용하는 방식을 선택한다.
- 큰 크기
- 세션 ID와 달리 페이로드에 데이터가 포함되어 토큰 크기가 상대적으로 크다.
쿠키 세션 JWT 저장 위치 클라이언트에 저장 서버에 저장 클라이언트에 저장 상태 관리 서버와 클라이언트 간의 상태 관리 역할은 없음 서버에서 관리 클라이언트에서 관리 크기 제한 쿠키 크기 제한 서버 측에서 상태를 관리하기 때문에 큰 데이터 저장 불가 JWT 자체에 모든 정보를 포함
크기가 커질 수 있음보안 쿠키에 HttpOnly와 Secure 속성을 설정하여 보안 강화 가능 서버에 저장되어 있어 서버 측 보안이 중요 서명된 토큰을 사용하여 변조 방지 사용 예시 서버가 설정한 인증 정보를 클라이언트에 저장하여 요청 시 전달 로그인 후 세션 ID를 이용해 인증 관리 로그인 후 JWT로 인증 처리 만료 처리 쿠키에 만료 시간 설정 가능 서버에서 세션 만료 관리 JWT는 유효 기간을 포함
만료 후 재발급 필요주요 특징 클라이언트에 저장된 데이터를 서버로 자동 전달 세션 ID를 통해 상태 관리
서버에서 클라이언트의 정보를 추적상태 관리 없음
토큰 기반 인증
서명된 정보 포함'CS > 웹개발' 카테고리의 다른 글
Spring Security (1) 2025.01.04 Spring framework (0) 2025.01.02 쿠키, 세션 (0) 2024.12.30 JDBC, Mybatis, JPA (0) 2024.12.29 TCP와 UDP (0) 2024.12.26 댓글