728x90
반응형

JWT란 무엇인가?

JWT는 JSON Web Token의 약자로, JSON 형태의 데이터를 네트워크를 통해 안전하게 전송하기 위해 설계된 방식입니다. JWT는 마치 편지와 같은 구조를 가지고 있습니다:

  • 봉투 (Header): 토큰의 타입과 사용된 알고리즘 정보
  • 편지지 (Payload): 실제 전달하려는 데이터 (Claims)
  • 서명 (Signature): 토큰의 유효성을 검증하기 위한 서명

 

JWT의 구조

JWT는 세 부분으로 구성되며, 각 부분은 Base64로 인코딩되어 점(.)으로 구분됩니다:

header.payload.signature

 

 

JWT의 핵심: 서명(Signature)

서명은 JWT의 무결성을 보장하는 핵심 요소입니다. 서명 과정은 다음과 같습니다:

  • 비밀키(Secret Key)를 사용
  • 헤더와 페이로드를 입력으로 사용
  • 지정된 알고리즘(예: HMAC)으로 서명 생성

 

JWT의 활용 분야

JWT는 다양한 분야에서 활용되지만, 가장 흔한 용도는 인증(Authentication)입니다. 주요 활용 분야는 다음과 같습니다:

  • 인증
  • 정보 공유
  • 권한 부여
  • 단일 로그인(SSO)
  • 서버 간 통신

 

JWT 기반 인증 과정

로그인

  • 사용자가 로그인 정보 제공
  • 서버가 정보 확인 후 JWT 생성 및 클라이언트에 전송

인증

  • 클라이언트가 JWT를 서버에 전송
  • 서버가 JWT를 검증
  • 검증 성공 시 요청 처리

JWT의 장점

  • 서버 부하 감소: 세션 저장소가 필요 없음
  • 확장성: 다중 서버 환경에서 유리
  • 클라이언트 측 저장: 필요한 정보를 페이로드에 포함 가능

JWT의 단점

  1. 토큰 크기: JWT는 모든 정보를 자체적으로 포함하므로, 토큰 크기가 상대적으로 클 수 있습니다. 이는 네트워크 대역폭 사용량을 증가시킬 수 있습니다.
  2. 보안 위험: 토큰 탈취: JWT가 탈취되면, 만료되기 전까지 공격자가 사용할 수 있습니다.
  3. 토큰 무효화의 어려움: 일단 발급된 JWT는 만료 전까지 유효하며, 개별 토큰을 즉시 무효화하기 어렵습니다. 이는 보안 문제 발생 시 대응을 어렵게 만들 수 있습니다.
  4. 갱신 로직의 복잡성: 토큰 만료 관리와 갱신 프로세스가 복잡할 수 있습니다.
  5. 상태 저장의 한계: JWT는 기본적으로 무상태(stateless)이므로, 사용자 상태 변경을 실시간으로 반영하기 어려울 수 있습니다.
  6. 암호화 부재: 기본 JWT는 서명은 되지만 암호화되지 않아, 중요한 정보는 페이로드에 포함시키지 말아야 합니다.
  7. 구현의 복잡성: 올바른 JWT 구현과 관리는 복잡할 수 있으며, 잘못 구현 시 보안 취약점이 발생할 수 있습니다.
  8. 만료 시간 설정의 딜레마: 짧은 만료 시간은 보안에 유리하지만 사용자 경험을 해칠 수 있고, 긴 만료 시간은 그 반대입니다.

 

JWT 실습

JWT.io 사이트를 통해 JWT를 직접 생성하고 검증해볼 수 있습니다. 이를 통해 JWT의 구조와 작동 방식을 실제로 확인할 수 있습니다.

 

결론

JWT는 현대 웹 애플리케이션에서 인증과 정보 교환을 위한 효율적이고 안전한 방법을 제공합니다. 그러나 보안을 위해 적절한 사용과 관리가 필요합니다. JWT의 이해는 웹 개발자에게 필수적인 지식이 되어가고 있습니다.

 

출처

https://www.youtube.com/watch?v=36lpDzQzVXs

 

728x90
반응형
728x90
반응형

인증과 인가의 기본 개념

  • 인증(Authentication): 사용자의 신원을 확인하는 과정 (놀이공원 입장권)
  • 인가(Authorization): 인증된 사용자에게 특정 리소스에 대한 접근 권한을 부여하는 과정 (놀이공원에서만 사용가능)

 

인증 방법의 발전

3.1. 기본 인증

- 사용자 ID와 비밀번호를 직접 입력

- 보안상 취약점 존재

 

3.2. 쿠키/세션 기반 인증

- 브라우저의 쿠키를 이용한 사용자 정보 저장 (클라이언트 저장)

- 서버 측 세션 관리의 도입 (서버 저장)

 

3.3. 토큰 기반 인증

- JWT(JSON Web Token) 활용

- 무상태성(Stateless) 구현으로 서버 부하 감소

- 토큰 기반 인증의 구체적 구현

 

4.1. 액세스 토큰과 리프레시 토큰

- 액세스 토큰: 짧은 유효기간, 실제 인증에 사용

- 리프레시 토큰: 긴 유효기간, 액세스 토큰 갱신에 사용

 

4.2. 토큰 기반 인증의 장단점

장점: 서버 확장성 개선, DB 조회 최소화

단점: 토큰 탈취 시 보안 위험

 

보안 강화 방법

- HTTPS 사용

- HttpOnly 옵션 활용

- 토큰 만료 시간 조절

 

기타 고려사항

- OAuth를 통한 외부 서비스 인증

- 인증 서버 분리

- SSL/TLS 활용

 

결론

인증과 인가 구현보안과 사용자 편의성 사이의 균형을 맞추는 과정입니다. 서비스의 특성과 요구사항에 맞는 최적의 방식을 선택하는 것이 중요합니다.

728x90
반응형
728x90
반응형

[추천링크]

https://hongong.hanbit.co.kr/%EC%99%84%EB%B2%BD-%EC%A0%95%EB%A6%AC-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98-%ED%86%A0%ED%81%B0-%EC%BA%90%EC%8B%9C-%EA%B7%B8%EB%A6%AC%EA%B3%A0-cdn/

 

완벽 정리! 쿠키, 세션, 토큰, 캐시 그리고 CDN

웹 서핑을 하면서 어떤 사이트에 들어가면 쿠키를 설정하라는 문구를 본 적이 있을 거예요. 이 쿠키 때문에 쇼핑 사이트에 로그인하지 않아도 장바구니에 물건을 담아두거나 검색 기록에서 이

hongong.hanbit.co.kr

 

쿠키 (Cookie)

 

쿠키는 웹사이트가 사용자의 브라우저에 저장하는 작은 데이터 조각입니다.

예시: 쿠키는 마치 온라인 쇼핑몰에서 받은 쿠폰북과 같습니다. 이 쿠폰북에는 여러분이 방문한 매장, 관심 있는 상품, 장바구니에 담은 물건 등을 메모할 수 있습니다. 여러분이 직접 들고 다니면서 수정할 수 있죠.

 

주요 특징

  • 사용자의 브라우저에 저장됩니다.
  • 사용자가 직접 수정할 수 있습니다.
  • 보안에 민감한 정보는 저장하지 않는 것이 좋습니다.

 

세션 (Session)

 

세션서버에서 사용자의 상태 정보를 저장하고 관리하는 방법입니다.

예시: 세션은 백화점의 고객 관리 시스템과 비슷합니다. 고객이 VIP 라운지에 들어가면, 백화점은 고객의 ID를 확인하고 내부 시스템에서 고객 정보를 관리합니다. 고객은 자신의 정보를 직접 수정할 수 없고, 백화점만이 관리할 수 있습니다.

 

주요 특징

  • 서버에서 관리됩니다.
  • 사용자가 직접 수정할 수 없어 보안성이 높습니다.
  • 서버에 부하가 갈 수 있습니다.

 

토큰 (Token)

토큰사용자 인증을 위해 발급되는 암호화된 문자열입니다.

예시: 토큰은 놀이공원의 입장 팔찌와 유사합니다. 입구에서 티켓을 구매하면 특별한 팔찌를 받게 되는데, 이 팔찌에는 암호화된 정보가 들어있습니다. 놀이공원 내의 각 시설에서는 이 팔찌를 스캔해 입장 자격을 확인합니다.

 

주요 특징

  • 서버에서 발급하고 클라이언트가 보관합니다.
  • 암호화되어 있어 위조가 어렵습니다.
  • 서버의 부하를 줄일 수 있습니다.

 

캐시 (Cache)

캐시자주 사용되는 데이터를 임시로 저장해두는 장소입니다.

예시: 캐시는 카페의 진열장과 같습니다. 자주 주문되는 케이크는 주방에서 매번 만들지 않고 진열장에 미리 준비해둡니다. 손님이 주문하면 바로 제공할 수 있어 시간과 노력을 절약할 수 있죠.

 

주요 특징

  • 자주 사용되는 데이터를 빠르게 접근할 수 있는 곳에 저장합니다.
  • 서버의 부하를 줄이고 응답 속도를 높입니다.
  • 데이터의 일관성 관리에 주의가 필요합니다.

 

결론

이 네 가지 개념은 각각 고유한 특징과 용도를 가지고 있습니다:

  • 쿠키: 사용자 브라우저에 간단한 정보 저장 (클라이언트 저장)
  • 세션: 서버에서 중요한 사용자 정보 관리 (서버 저장)
  • 토큰: 안전한 사용자 인증 수단
  • 캐시: 빠른 데이터 접근을 위한 임시 저장소

웹 개발에서 이 개념들을 적절히 활용하면 보안성, 효율성, 사용자 경험을 모두 향상시킬 수 있습니다. 각 상황에 맞는 적절한 기술을 선택하는 것이 중요합니다.

728x90
반응형
728x90
반응형

참고영상 https://www.youtube.com/watch?v=tosLBcAX1vk 

 

쿠키 = 그냥 옮기는 시스템 매개체

토큰 = 서버가 기억하는 이상하게 생긴 텍스트 (ID카드처럼 서버에게 보여줘야 함)

JWT = 정보를 갖고 있는 토큰. DB없이 검증가능!

세션 = 요청받으면 서버에서 DB에 있는 데이터를 전달

 

유저 인증을 위해서는 JWT 혹은 세션을 사용할 수 있음

 

 

쿠키와 토큰은 모두 클라이언트와 서버 간에 정보를 저장하고 전송하는 데 사용할 수 있는 방법입니다. 그러나 둘 사이에는 몇 가지 주요 차이점이 있습니다.

  1. 저장 위치: 쿠키는 고객의 컴퓨터에 저장되고 토큰은 서버에 저장됩니다.
  2. 지속성: 쿠키는 여러 세션에 걸쳐 유지됩니다. 즉, 웹 사이트를 여러 번 방문하는 동안 유지해야 하는 정보를 저장하는 데 사용할 수 있습니다. 반면에 토큰은 일반적으로 수명이 짧고 단일 세션에만 유효합니다.
  3. 보안: 쿠키는 일반 텍스트로 저장되며 고객의 컴퓨터에 액세스할 수 있는 모든 사람이 액세스할 수 있습니다. 반면에 토큰은 일반적으로 암호화된 형태로 저장되며 더 안전합니다.
  4. 사용 사례: 쿠키는 일반적으로 사용자 기본 설정을 저장하고 웹 사이트에서 사용자 활동을 추적하는 데 사용됩니다. 토큰은 일반적으로 사용자를 인증하고 보호된 리소스에 대한 액세스 권한을 부여하는 데 사용됩니다.

요약하면 쿠키와 토큰은 모두 클라이언트와 서버 간에 정보를 저장하고 전송하는 방법입니다. 쿠키는 영구 데이터를 저장하는 데 사용되는 반면 토큰은 보안 인증 및 액세스 제어에 사용됩니다.

728x90
반응형

+ Recent posts