세션 기반 인증(Session-Based Authentication):
- 동작 방식:
- 사용자가 로그인하면 서버는 세션을 생성하고 세션 식별자를 사용자 브라우저에게 제공합니다.
- 이후 모든 요청에서 브라우저는 세션 식별자를 서버에 제공하여 사용자를 식별합니다.
- 보안성:
- 쿠키를 통해 세션 식별자를 저장하므로 쿠키의 안전성이 중요합니다.
- 쿠키 변조 등에 대비하기 위해 보안 설정이 필요합니다.
- 서버 부하:
- 서버는 사용자의 상태를 유지해야 하므로 메모리를 사용하게 되어 서버 부하가 발생할 수 있습니다.
토큰 기반 인증(Token-Based Authentication):
- 동작 방식:
- 사용자가 로그인하면 서버는 토큰을 생성하고 이를 사용자에게 제공합니다.
- 사용자는 토큰을 갖고 API 요청을 할 때마다 토큰을 서버에 제공하여 인증을 수행합니다.
- 보안성:
- 토큰은 서명되어 있어 변조가 어렵습니다.
- HTTPS를 통해 통신할 경우 보안성이 확보됩니다.
- 서버 부하:
- 서버는 상태를 유지하지 않아도 되므로 확장성이 높아집니다.
JWT (JSON Web Token):
- 토큰 형식: JSON 형식의 토큰으로, 정보를 안전하게 전송하기 위한 간결하고 자가 수용적인 표준입니다.
- 구성 요소:
- 헤더(Header): 토큰 유형 및 서명 알고리즘 등의 메타데이터를 포함합니다.
- 페이로드(Payload): 클레임(사용자, 권한 등) 정보를 포함합니다.
- 서명(Signature): 토큰의 유효성을 확인하기 위한 서명이 포함됩니다.
Access Token과 Refresh Token:
- Access Token:
- 사용자의 인증 및 권한 부여에 사용되는 토큰.
- 짧은 유효 기간을 가지며, 서버에 자주 새로운 토큰을 발급 받아야 합니다.
- Refresh Token:
- 장기적으로 사용되는 토큰으로, Access Token을 갱신하는 데 사용됩니다.
- 더 높은 보안 수준을 필요로 하며, Access Token이 만료되면 Refresh Token을 사용하여 새로운 Access Token을 얻습니다.