웹
JWT & 세션 인증
탁재민
2024. 4. 19. 12:33
JWT (JSON Web Token) 인증
설명
- 사용자의 인증 정보를 JSON 객체에 인코딩하고 암호화 처리한 토큰
- 클라이언트 사이드에서 관리
- 확장성이 높고, 비용이 낮음, 그러나 유저 인증에 대한 직접적 컨트롤이 불가능
과정
- 로그인 및 토큰 생성:
- 사용자가 로그인하면, 서버는 사용자의 인증 정보를 검증한 후, 서버의 비밀키로 서명된 JWT를 생성
- 사용자 식별자, 유효 기간, 발급자 등의 정보 포함
- 토큰 전송:
- 생성된 JWT는 사용자에게 전송
- Response의 header나 body에 실어 보낸 후 브라우저의 웹 스토리지에 저장
- 또는 쿠키 형태로 전송
- 토큰 활용:
- 사용자가 서버에 요청을 할 때마다 JWT를 Authorization 헤더에 포함시켜 전송
- 또는 쿠키 형태로 전송
- 서버는 헤더에서 JWT를 추출하여 비밀키로 서명을 검증하고, 토큰이 유효한지 검증
- 세션 유지:
- JWT의 유효성이 검증 후 요청 처리
- 토큰이 만료었다면 접근 불가
세션 기반 인증
설명
- 서버에서 사용자의 로그인 상태와 인증 정보를 관리
- 서버 메모리에 세션을 저장하고, 클라이언트에는 세션 ID만을 쿠키로 전달
- 확장성이 낮고 비용이 높음, 그러나 유저 인증에 대한 직접 컨트롤 가능
과정
- 로그인 및 세션 생성:
- 사용자가 로그인하면, 서버는 사용자의 인증 정보를 검증하고 세션을 생성
- 생성된 세션 ID가 클라이언트에 쿠키 형태로 전송
- 세션 ID 저장:
- 클라이언트는 받은 세션 ID를 쿠키에 저장하고, 이후의 모든 요청에 이 쿠키를 포함시켜 서버에 전송
- 세션 유지:
- 서버는 들어오는 요청마다 쿠키에서 세션 ID를 확인
- 해당 세션 ID에 매핑된 데이터를 조회하여 사용자가 유효한지 검증
- 세션 종료:
- 사용자가 로그아웃하면 서버는 해당 세션을 종료(삭제)하고, 클라이언트는 세션 ID를 무효화