Tiny Star

📌TIL [Today I Learn]

[TIL] 23년 7월 28일 금요일

청크 2023. 7. 28. 20:52

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