일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 서브넷 #안에 #ec2 인스턴스 #ami #생성 #firewall
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #웹페이지 #http #public #instance
- aws #아키텍트 #과정 #vpc #인프라 구축 #private #resource #security #group
- aws #아키텍트 #과정 #vpc #인프라 구축 #private subnet #ec2 #인스턴스 #elastic compute #vm
- aws #클라우드 #퍼블릭 클라우드 #아키텍트 #과정
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- mysql #linux #설정 #wordpress #웹사이트 #db 연결 #
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- sasac #aws 클라우드 #아키텍트 과정 #가상화 #vmbox #vmware #esxi #tar #selinux
- ubuntu #설정변경 #vmware #vmbox #linux #명령어
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 #보안그룹 #생성 #http #ipv4
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- aws #아키텍트 #과정 #vpc #인프라 구축
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #private subnet
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #igw #curl #명령어 #http
- aws #아키텍트 #과정 #s3 #bucket #생성 #이미지업로드
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #internet gateway #연결
- 프로세스 #CPU #시공유 #커널
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- 비트 #바이트 #이진수
- storage #로컬스토리지 #세션스토리지 #백그라운드 서비스
- samba #가상머신 #daemon
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #route53 #igw #연결
- haproxy #wordpree #php #linux #가상화 #가상머신 #내용정리
- virtualbox #vmware #router #nat #pat #네트워크 구성도 #aws #ubuntu #
- aws #아키텍트 #과정 #vpc #인프라 구축 #vpc #nat #gateway #private subnet
- 쓰레드 #쓰레드풀 #프로세스
- Today
- Total
요리사에서 IT개발자로
스파르타 부트캠프 SpringBoot JWT인증, 인가 본문
JWT(Json Web Token)란
JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim기반 WebToken이다.
토큰의 한 종류라고 생각하면된다.
쿠키저장소를 사용하여 JWT를 저장한다.
서버가 1대인 경우에는
Session1이 모든 Client의 로그인 정보를 소유한다
서버가 2대 이상인 경우(대용량 트래픽 처리)
Session마다 다른 Client 로그인 정보를 가지고 올 수 있다.
Client1의 로그인정보가 Servie1에 저장이되있다는 가정하에
Client1은 그런거 모르고 API를 요청한다면
Server2와 Server3에도 API를 요청하게 될 수 있다.
이러한 문제의 해결방법은
Sticky Session을 이용하여 Client마다 Server에 고정한다.
or
세션 저장소를 따로 생성하여 모든 세션을 저장한다.
위와 같은 문제해결을 위하여
세션 저장소(Session Storage)를 생성한 경우
Session Storage가 모든 Client의 로그인 정보를 소유하고 있기에
모든 서버에서 모든 Client의 API요청이 처리가 가능하다.
JWT를 사용하게 되면
로그인 정보를 Server에 저장하지 않고
Client에 로그인 정보를 JWT로 암호화하여 저장한다.
"JWT를 통하여 인증/인가"
또한 모든 서버에서 동일한 Secret Key를 소유한다.
Secret Key를통한 암호화/ 위조 검증을 한다.(복호화시에만)
JWT의 장점으로는
동시접속자가 많을 때 서버 측 부하를 낮춘다.
단점은
구현의 복잡도가 증가하고
JWT에 담는 내용이 많아질수록 네트워크 비용이 증가한다.
기 생성된 JWT를 일부만 만료시킬 방법이 없다
Secret Key가 공개되어 있어 JWT 조작이 가능하다.
Client가 username, password로 로그인 성공시에
서버에서 로그인정보를 받아 JWT로 암호화를 한다(Secret Key를 사용)
JWT 예시
서버에서 직접 쿠키를 생성해서 JWT를 담아 Client에 전달한다.
JWT전달 방법은 개발자가 정한다.
Cookie cookie = new Cookie(AUTHORIZATION_HEADER, token); // Name-Value
cookie.setPath("/");
// Response 객체에 Cookie 추가
res.addCookie(cookie);
브라우저에서 쿠키 저장소에 자동으로 JWT가 저장된다.
Client에서 JWT통해 인증하는 방법
서버에서 API 요청을 받을 때마다 쿠키에 포함된 JWT를 찾아서 사용한다.
// HttpServletRequest 에서 Cookie Value : JWT 가져오기
public String getTokenFromRequest(HttpServletRequest req) {
Cookie[] cookies = req.getCookies();
if(cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(AUTHORIZATION_HEADER)) {
try {
return URLDecoder.decode(cookie.getValue(), "UTF-8"); // Encode 되어 넘어간 Value 다시 Decode
} catch (UnsupportedEncodingException e) {
return null;
}
}
}
}
return null;
}
쿠키에 담긴 정보가 여러개 일 수 있어서
그 중 이름이 JWT가 담긴 쿠키의 이름과 동일한지 확인하여 JWT를 가져온다
이후 Client가 전달한 JWT위조 여부를 검증한다(Secret Key를 사용한다)
JWT유효기간도 확인
검증이 성공한다면
JWT에서 사용자 정보를 가져와서 확인하고
API를 요청한 Client에게 해당 데이터를 전달한다.
결국 세션저장소가 없이
Secret Key를 쿠키에 같이 전달해줌으로써
Client가 Cookie 저장소에 보관하고 있다가
서버에게 요청을 할 경우
JWT와 Secret Key를 확인 -> 유효기간 확인 -> 데이터처리 이다.
JWT는 누구나 평문으로 복호화가 가능하지만
Secret Key가 없다면 JWT 수정이 불가능하다(Read Only)
JWT 조회 사이트
'Spring' 카테고리의 다른 글
Spring Boot PostMan사용, JWT 인증,인가 (로그인, 로그아웃, 회원탈퇴) (1) | 2024.06.10 |
---|---|
Spring Security JWT 인증 방식과 Security 동작원리 (0) | 2024.06.05 |
스파르타 부트캠프 SpringBoot @Validation란 (0) | 2024.05.31 |
스파르타 부트캠프 Spring Master 3강 고아Entity 삭제(orphanRemoval) (0) | 2024.05.29 |
스파르타 부트캠프 Spring Master 3강 영속성 전이 (0) | 2024.05.29 |