728x90
세션 기반 인증

- 세션 기반 인증 방식은 서버가 클라이언트의 세션 정보를 저장하고 있는 stateful 한 방식이다.
- 사용자가 로그인을 하게 되면, 서버는 사용자 정보 검증 후, 세션 id를 발급하고 브라우저의 쿠키에 저장한다.
- 브라우저는 모든 요청마다 쿠키에 있는 세션 id를 포함, 서버는 세션 id를 통해 유저 정보를 세션 스토리지에서 조회
- 일반적으로 서버 메모리, DB 등을 사용해 세션을 저장한다.
- 세션은 서버에서 만료시켜, 클라이언트의 권한을 회수할 수 있다.
- 단점
- 서버 확장 어렵다(분산 환경에서는 세션을 공유할 수 있는 세션 클러스터링 필요)
- 중앙에서 세션을 관리할 수 있는 세션 DB를 구축해야 한다.
- 요청이 많아지면 세션 조회에 따른 DB 부하가 심해질 수 있다.
토큰 기반 인증

- 토큰 기반 인증 방식은 서버가 클라이언트의 세션을 저장하지 않기 때문에 stateless 방식이다(대표적으로 JWT가 있다)
- 사용자가 로그인을 하게 되면 서버는 사용자 정보 검증 후 토큰을 발급, 응답으로 내려준다.
- 클라이언트는 토큰을 저장하고 있다가 Authorization 헤더에 토큰을 전달한다.
- 서버가 분산된 환경에서도 서버에서 클러스터링이 필요 없다.
- JWT 토큰 내부에는 기본적인 정보, 검증된 토큰임을 증명하는 서명 같은 정보가 들어있다.
- 토큰 안에 유용한 정보가 있어 IO 작업을 하지 않아도 정보를 알 수 있다
- 단점
- 한번 발행된 토큰은 클라이언트가 보관하여 회수하기 어렵다.
- 회수가 어렵고 탈취되면 대처가 어려우므로 만료시간을 짧게 가지고 가야 한다.
- 토큰이 길어지면 네트워크 부하가 커질 수 있다.
- payload는 암호화된 정보가 아니기 때문에 민감정보를 담지 말자.
- JWT 인 경우 단일 키를 사용하기 때문에 시크릿 키가 유출되면, 취약사항이다.
JWT 구조
- 헤더 : 토큰 타입과 서명 알고리즘으로 이뤄져 있다.
- payload: 토큰 발급자, 토큰 유통기간, 유저 등을 정의한다.
- 서명: 메시지 전송 과정에서 바뀌지 않은 것을 확인하는 보안 서명
728x90
'실무 프로젝트로 배우는 Kotlin & Spring > 회원 인증 서비스 개발하기' 카테고리의 다른 글
| 회원가입 (0) | 2022.12.14 |
|---|---|
| JWT 기반 인증 구현 (0) | 2022.12.13 |
| 공통 에러 처리 (0) | 2022.12.13 |
| API 스펙 정의 (0) | 2022.12.13 |
| 프로젝트 구성하기 (0) | 2022.12.13 |