오늘의 학습 키워드 📕
▸ 코트카타
▸ 인증과 인가
▸ 쿠키와 세션
▸ JWT
▼ 코트카타
▼ 인증과 인가
📍인증과 인가란?
- 인증(Authentication): 해당 유저가 실제 유저인지 인증하는 것
- 인가(Authorization): 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 것
=> 로그인 - 인증 / 회원, 비회원 여부 - 인가
📍인증의 방식
- 쿠키-세션 방식의 인증
- 서버가 '특정 유저가 로그인 되었다'는 상태를 저장하는 방식
- 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다는 개념
- JWT 기반 인증
- JWT: 인증에 필요한 정보들을 암호화시킨 토큰을 의미
- JWT 토큰을 HTTP 헤더에 실어 서버가 클라이언트를 식별
▼ 쿠키와 세션
📍쿠키와 세션
- 쿠키: 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일
- 세션: 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용됨
- 서버에서 클라이언트 별로 유일무이한 '세션 ID'를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장
- 서버에서 생성한 '세션 ID'는 클라이언트의 쿠키값('세션 쿠키')으로 저장되어 클라이언트 식별에 사용됨
▼ JWT
📍JWT 란?
- JWT: JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반이 Web Token -> 토큰의 한 종류
- 일반적으로 쿠키 저장소를 사용하여 JWT를 저장
📍JWT 장/단점
- 장점
- 동시 접속자가 많을 때 서버 측 부하 낮춤
- Client, Server가 다른 도메인을 사용할 때
- 단점
- 구현의 복잡도 증가
- JWT에 담는 내용이 커질 수록 네트워크 비용 증가
- 기 생성된 JWT를 일부만 만료시킬 방법이 없음
- Secret key 유출 시 JWT 조작 가능
📍JWT 사용 흐름
- Client가 username, password로 로그인 성공 시
a) 서버에서 "로그인 정보" -> JWT로 암호화 (Secret Key 사용)
b) 서버에서 직접 쿠키를 생성해 JWT를 담아 Client 응답에 전달
c) 브라우저 쿠키 저장소에 자동으로 JWT 저장됨
-
Client에서 JWT 통해 인증 방법
a) 서버에서 API 요청 시마다 쿠키에 포함된 JWT를 찾아서 사용
b) Server
- Cleint가 전달한 JWT 위조 여부 검증 (Secret Key 사용)
- JWT 유효기간이 지나지 않았는지 검증
C) 검증 성공시,