컴공생의 발자취

[내일배움캠프 30일차 TIL] JWT(Cookie vs Header) 본문

🤝 활동/내배캠TIL

[내일배움캠프 30일차 TIL] JWT(Cookie vs Header)

MNY 2024. 5. 29. 23:03
728x90
반응형
오늘의 진도 : 아직 개인과제 5단계 진행 중...

JWT 너란 녀석 내가 후까 패주마..
오늘의 학습, 오늘의/지난 날의 궁금증, 면담, 오늘의 회고 이렇게 4개의 큰 틀로 나누어 정리할 것이다.

 

💡 오늘의 학습 키워드

- 면담 -
jwt 구조와 JwtUtil
시크릿 키 & 퍼블릭 키
jwt의 인증 방식(Cookie vs Header)

 


 

jwt 구조와 JwtUtil

  • 헤더 + 내용 + 서명 : .을 기준으로 나뉨
  • 이걸 세팅 해놓은 게 JwtUtil

* Jwt는 보안상 사용한다!

But, 누구나 다 복호화하면 보안상 안 좋지 않나? -> 시크릿 키 & 퍼블릭 키

 

시크릿 키 & 퍼블릭 키

  1. 시크릿키 : 내가 만든 JWT만 볼 수 있다.
    * 엄청 긴 스트링 이용 validate token
  2. 퍼블릭키 : 무조건 볼 수 있고

 

jwt의 인증 방식(Cookie vs Header)

  • Cookie : 서버가 JWT를 쿠키에 저장하여 클라이언트로 전송. 클라이언트는 자동으로 쿠키를 포함하여 요청.
    • 장점 : 자동으로 쿠키를 전송하므로 클라이언트 측 코드가 간단해짐. XSS 공격 방지를 위해 HttpOnly 속성을 사용할 수 있음.
    • 단점 :CSRF 공격에 취약할 수 있음. 이를 방지하기 위해 SameSite 속성이나 CSRF 토큰을 사용해야 함.
    • 활용방안 : 웹 애플리케이션에서 사용자 세션 관리, 다양한 인증 및 권한 부여 시스템에서 사용

* 결론 : Cookie에 대해...

백엔드에서 브라우저에 뭘 넣는 것

특정 유저 브라우저를 판단하는 기준. 데이터를 쌓아 넣을 수 있다.

  • Header : 클라이언트가 JWT를 로컬 저장소에 저장. HTTP 요청의 헤더에 JWT 토큰을 포함하여 전송하는 방식.
    • 장점 : CSRF 공격에 덜 취약함. 클라이언트가 명시적으로 헤더에 JWT를 포함하므로 더 안전한 제어 가능.
    • 단점 : 클라이언트 측 코드가 복잡해질 수 있음. JWT를 로컬 저장소에 저장할 때 XSS 공격에 노출될 수 있음.
    • 활용 방안 : SPA(Single Page Application)에서 사용자 인증, RESTful API 서버에서 클라이언트 인증 및 권한 부여

* 결론 : Header에 대해...

하나의 HTTP call만 본다

헤더에 jwt를 넣는 것은 그 사람의 자유도를 인정

헤더에 넣어서 보내주세요(공지) 강제가 아니다!

 

Why? Header에 넣어서 많이 사용하는 이유?

쿠키에 넣는 건 우리가 그 사람꺼에 강제적으로 넣는 것. 즉, 백엔드가 쿠키를 다 관리.

그렇게 되면 서버에 부담이 커지기 때문.  

  • 인증 방식의 구체적인 흐름

  • 요약된 흐름

  • 클라이언트에서 서버로 가는 데이터
    • 사용자 인증 정보 ex) 'username'과 'password'
    • 보호된 자원 요청
      • Cookie : 브라우저가 자동으로 포함하는 쿠키(JWT 포함)
      • Header : HTTP 헤더에 포함된 JWT ex) 'Authorization' : Bearer <JWT>
  • 서버에서 클라이언트로 가는 데이터
    • 로그인 응답
      • Cookie : 로그인 성공 메시지와 함께 설정된 쿠키(JWT 포함)
      • Header : JWT 포함 ex) '{"token" : "<JWT>"}'
    • 자원 제공 응답 : 보호된 자원 데이터

 


오늘의 궁금증

  • Q : PUT vs UPDATE vs PATCH ? 
  • Q : Cookie + JWT 같이 사용하는 이유?

 


면담

5단계를 진행함에 앞서서 jwt를 모르겠어서 튜터님을 찾아갔다.

jwt의 개념과 코드에서 어떻게 동작하는지를 들으면서 그때는 이해가 갔는데,..

생각해보면 왜 JWT를 Cookie에 넣어서 보내는지를 못 물어봤다. 지금은 그게 또 문제다.

그땐 Cookie도 잘 몰랐으니..

아무튼 jwt에 대해 듣고 jwt의 인증 방식 cookie와 header의 차이에 대해 간략하게 들었다.

그래서 header을 많이 사용하는데.. 나는 뭘 사용해야 하는지 지금 잘 모르겠다. 근데 일단 과제를 진행하려면..

Cookie를 사용하는 방식으로 하려고 하는데 또 계속 생각해보니 2주차 강의는 header 방식을 하는데 ..

2주차의 header은 spring security랑 연결되어 강의가 진행되서 spring security도 이해해야 되는 건가..

고민이 많다.

 

결론적으로 면담 이후 개인적으로 공부할 때 찾아보면 도움이 되는 키워드

: 웹 기초, response request 동작, 서블릿, 컨트롤러, jpa 

 


오늘의 회고

  • 12시간 중 얼마나 몰입했는가?

일단 기본적인 시간 제외(식사시간-2.5, 코드카타-1, 특강-1 : 총 4시간 30분)

그러면  7시간 30분이 남는데 저녁 시간은 전반적으로 집중을 못했으니 -1

오후에 JWT하다가 토큰, 세션, 쿠키, JWT 이거 뭔지 몰라서 쉰 것과 집중 못한 거.. -2

그러면 남는 시간이 4시간 30분이니까 그 만큼은 집중하지 않았을까?

 

  • 오늘의 생각

오늘의 질문 내용과 Cookie vs Session vs Cookie-Session vs JWT 이렇게를..

모르겠다. 흐름도 어떤 차이가 있는지 잘 모르겠고 특히나 JWT면 JWT고 Cookie면 Cookie지!

왜 강의에서는 Cookie랑 JWT를 같이 사용하는거지? JWT를 Cookie에 담아서 주잖아?

왤까? 이유가 분명 있겠지 이제 그거 알아보러 갈거야.

 

  • 내일 학습할 것은 무엇인지

바로 위에서 말한 Cookie vs Session vs Cookie-Session vs JWT 이것들의 차이랑

각각의 흐름? 그리고 JWT를 Cookie랑 같이 사용하는 이유? 일단 Cookie던 Header이던 같이 사용하잖아?

JWT 자체만으로는 사용이 불가능한 걸까? 아직 JWT를 이해를 못하는 걸까? 근본적인 걸 모르는 건지..

웹의 흐름 공부가 시급하다!

728x90
반응형