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

인증과 인가의 기본 개념

  • 인증(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

1.JWT (JSON Web Token)란?

JWT는 당사자 간에 정보를 JSON 객체로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 정의하는 개방형 표준입니다.

 

주요 특징:

  • 구조: Header, Payload, Signature 세 부분으로 구성
  • 사용 사례: 인증 및 정보 교환
  • 장점: 상태를 저장할 필요가 없어 서버 부하 감소

JWT 작동 방식:

  1. 사용자 로그인
  2. 서버가 JWT 생성 및 클라이언트에 전송
  3. 클라이언트가 후속 요청에 JWT 포함
  4. 서버가 JWT 검증 후 요청 처리

 

2. OAuth란?

OAuth는 사용자 데이터에 대한 접근 권한을 제3자 애플리케이션에 부여할 수 있게 하는 개방형 표준 프로토콜입니다.

 

주요 특징

  • 버전: OAuth 1.0과 OAuth 2.0 (더 널리 사용됨)
  • 목적: 안전한 위임 접근
  • 역할: Resource Owner, Client, Authorization Server, Resource Server

OAuth 2.0 승인 흐름

  1. 클라이언트가 리소스 소유자에게 권한 요청
  2. 리소스 소유자가 승인 부여
  3. 클라이언트가 인증 서버에 액세스 토큰 요청
  4. 인증 서버가 액세스 토큰 발급
  5. 클라이언트가 액세스 토큰으로 보호된 리소스 접근

3. JWT vs OAuth

  • JWT는 토큰 형식이고, OAuth는 권한 부여 프로토콜입니다.
  • JWT는 주로 인증에 사용되고, OAuth는 권한 부여에 중점을 둡니다.
  • OAuth는 JWT를 토큰 형식으로 사용할 수 있습니다.

보안 고려사항

  • JWT: 서명 검증, 만료 시간 설정, 민감한 정보 암호화
  • OAuth: HTTPS 사용, 상태 매개변수 검증, 안전한 클라이언트 비밀 관리

구현 팁

  • JWT: jsonwebtoken 라이브러리 (Node.js)
  • OAuth: Passport.js (Node.js), Spring Security OAuth (Java)

결론

JWT와 OAuth는 현대 웹 애플리케이션의 보안과 사용자 경험을 향상시키는 강력한 도구입니다. 개발자는 이들의 작동 원리와 적절한 사용 사례를 이해하고 있어야 합니다.

728x90

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

 

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

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

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

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

 

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

 

 

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

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

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

728x90

+ Recent posts