23년 7월 28일 금요일
오늘의 목표 : JPA, JWT 복습
오늘 공부한 내용🤓
전날 쿠키, 세션에 대해서 복습하고 오늘은 JWT, Filter, Spring Security에 대해 복습했다.
아직 Security는 다 못끝냈지만 다음주부터는 JPA 심화 강의랑 복습과제를 시작할 수 있을 것 같다.
JWT 기반 인증 : JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식
· JWT(Json Web Token) : JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token
(Json 기반의 Web Token, 그냥 토큰의 한 종류) → 일반적으로 쿠키 저장소를 사용하여 JWT를 저장
조금 더 쉽게 생각하자면 ! 발급된 토큰값을 Json 객체로 변환시켜 client에게 전송해주는 방식
→ JWS(Json Web Signature) 와 JWE(Json Web Encryption)로 서명과 암호화 한 것
· JWT를 사용하는 이유
→ 사용자의 인증(authentication) 또는 인가(authorization) 정보를 서버와 클라이언트 간에 안전하게 주고 받기 위해서 사용
→ RESTful과 같은 무상태(Stateless)인 환경에서 사용자 데이터를 주고받을 수 있음
JWT 장단과 한계
장점: JWT는 토큰 자체에 사용자의 정보가 저장되어 있어있기 때문에 서버 입장에서 토큰 검증만 하면 됨→ 동시 접속자가 많을 때 서버 측 부하 낮춤
→ Client, Sever 가 다른 도메인을 사용할 때 적합 (예-카카오 OAuth2 로그인 시 JWT Token 사용)
(쿠키와 세션을 사용할 때는 서버 단에 로그인한 모든 사용자의 세션을 DB나 캐시(cache)에 저장해놓고 쿠키로 넘어온 세션 ID로 사용자 데이터를 매번 조회해야함)
→ 확장성
단점 : 기 생성된 JWT 를 일부만 만료시킬 방법이 없고, Secret key 유출 시 JWT 조작 가능
→ 구현의 복잡도가 증가하고 JWT 에 담는 내용이 커질 수록 네트워크 비용 증가 (클라이언트 → 서버)
JWT 구조header
typ : 토큰의 타입을 지정 (jwt)
alg : 해싱 알고리즘을 지정, 해싱 알고리즘으로는 보통 HMAC SHA256 혹은 RSA 가 사용되며,
이 알고리즘은, 토큰을 검증 할 때 사용되는 signature 부분에서 사용
Payload→ 클래임의 종류는 크게 3가지 : 등록된 클레임, 공개 클레임, 비공개 클레임
등록된 클레임 (Registered Claim)
iss : 토큰 발급자 (issuer)
sub : 토큰 제목 (subject)
aud : 토큰 대상자 (audience)
exp : 토큰의 만료시간 (expiraton), 시간은 NumericDate 형식으로 되어있어야 하며 (예: 1480849147370) 언제나 현재 시간보다 이후로 설정할 것
nbf : Not Before 를 의미하며, 토큰의 활성 날짜와 비슷한 개념으로 여기에도 NumericDate 형식으로 날짜를 지정하며,
이 날짜가 지나기 전까지는 토큰이 처리되지 않음
iat : 토큰이 발급된 시간 (issued at), 이 값을 사용하여 토큰의 age 가 얼마나 되었는지 판단 할 수 있음
jti : JWT의 고유 식별자로서, 주로 중복적인 처리를 방지하기 위하여 사용되며 일회용 토큰에 사용하면 유용함
: 토큰에 대한 정보를 담기위해 이름이 이미 정해진 클레임들로, 사용은 선택(Optional)
공개 클레임 (Pulbic Claim)
: 공개 클레임은 사용자 정의 클레임으로. 공개용 정보 전달을 위해 사용되며 충돌 방지를 위해 URI 포맷을 이용
비공개 클레임 (Private Claim): 공개 클레임과는 달리 이름이 중복되어 충돌이 될 수 있으니 사용할 때 유의할 것
: 등록된 클레임도 아니고 공개된 클레임도 아닌 서버와 클라이언트 양측간의 합의하에 정의된, 사용자 정의 클레임
Signature→ 시크릿 키를 포함해서 암호화가 되어있음
시그니처는 토큰의 정보가 신뢰할 수 있는 것인지 판단할 수 있도록 함
토큰의 정보를 담는 부분으로, 토큰에 담기는 정보의 한 조각을 "클레임(claim)"이라 하며 name : value로 이루어져 있음
토큰타입, 해시 암호와 알고리즘 정보 2가지를 담고 있음 JWT가 발행되면, 발급된 jwt의 구성은 Header.Payload.Signature 3가지로 구성(.으로 구분)
Filter: Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치에서 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있음
→ 인증, 인가와 관련된 로직 처리도 가능하며 Filter를 사용하면 인증, 인가와 관련된 로직을 비즈니스 로직과 분리하여 관리할 수 있다는 장점이 존재함
→ 주로 범용적으로 처리해야하는 작업들에 활용(로깅 및 보안처리 등)
: Web 애플리케이션에서 관리되는 영역
어려웠던 내용😵💫
궁금&부족한 내용❓
느낀 점💡
매번 똑같은 감정이긴하지만,,, 처음에 이해 안된다고 좌절하지 말자!
2번 3번 4번 그렇게 100번 보다보면 이해 못할 사람 없다.
나도 한번에 다 이해하는 타고난 천재는 아니지만, 냉정하게 말하자면 내가 아직 잘 모르는 건 그만큼 노력을 안했기 때문인 것 같다.보고 또 보고 진도에 뒤쳐진다 생각말고 내 페이스대로! 화이팅 :)
'📌TIL [Today I Learn]' 카테고리의 다른 글
[TIL] 23년 8월 1일 화요일 (0) | 2023.08.01 |
---|---|
[TIL] 23년 7월 31일 월요일 (0) | 2023.08.01 |
[TIL] 23년 7월 27일 목요일 (0) | 2023.07.27 |
[TIL] 23년 7월 26일 수요일 (0) | 2023.07.26 |
[TIL] 23년 7월 25일 화요일 (0) | 2023.07.26 |