JSON 웹 토큰(JWT)은 두 당사자 간에 전송될 주장을 나타내기 위한 간결하고 URL 안전한 수단입니다. 이러한 주장은 종종 정보의 무결성과 진정성을 보장하는 데 사용됩니다.
이 기사에서는 JWT가 작동하는 방식을 탐구합니다. 우리는 JWT의 구조를 살펴보며, 이는 세 개의 인코딩되고 디지털 서명된 부분으로 구성됩니다. 그 후에 JWT의 일반적인 사용 사례를 논의하고 사용하는 것의 몇 가지 이점을 검토할 것입니다.
JWT의 구조(예제 포함)
JSON 웹 토큰(JWT)은 점으로 구분된 세 부분으로 구성됩니다: 헤더, 페이로드, 서명. 전체 구조는 다음과 같습니다:
xxxxxxxxxx.yyyyyyyyyy.zzzzzzzzzz
헤더:
- 헤더는 일반적으로 두 부분으로 구성됩니다: 토큰의 유형인 JWT와 사용되는 서명 알고리즘(예: HMAC SHA256 또는 RSA)입니다.
- 예제 헤더(베이스64 인코딩):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
페이로드:
- 페이로드는 주장을 포함합니다. 주장은 개체(일반적으로 사용자)에 대한 진술 및 추가 데이터를 포함합니다.
- 주장은 등록된 주장, 공개 주장 및 비공개 세 가지 유형이 있습니다.
- 예제 페이로드(베이스64 인코딩):
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
서명:
- 서명 부분을 만들기 위해서는 인코딩된 헤더, 인코딩된 페이로드, 비밀, 헤더에 지정된 알고리즘을 가져와서 서명해야 합니다.
- 서명은 JWT의 발신자가 주장하는 사람과 같다는 것을 확인하고 메시지가 전송 도중 변경되지 않았음을 보장하는 데 사용됩니다.
- 예제 서명:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
모두 합치면:
헤더: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
페이로드: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
서명: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
인코딩된 JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwia
JWT 사용의 이점:
JWT는 인코딩되고 서명된 JSON 객체를 포함하여, 서버의 상태 유지 세션에 의존하지 않고 무결성과 진정성을 보장합니다.
JWT를 유용하게 만드는 주요 이점은 다음과 같습니다:
- 공간 효율성을 위한 URL 안전 JSON 인코딩으로 인한 간결한 크기
- 과도한 데이터베이스 쿼리를 피하기 위해 필요한 모든 사용자 정보를 포함하는 자급자족
- 변조 방지 보안과 진정성 확인을 위한 디지털 서명
- 서버 측 세션을 제거하여 확장성을 향상시키는 무상태 특성
- 대부분의 언어에서 사용할 수 있는 JSON 파서와의 범용 상호 운용성
- 기존 프레임워크를 파괴하지 않고 사용자 정의 데이터 필드를 통한 확장 가능성
JWT vs OAuth: JWT와 OAuth의 차이
JWT (JSON 웹 토큰)과 OAuth는 관련이 있지만 웹 개발의 인증 및 권한 부여 맥락에서 서로 다른 목적을 수행합니다. JWT와 OAuth의 간단한 비교는 다음과 같습니다:
JWT (JSON 웹 토큰):
- 목적: JWT는 당사자 간에 정보를 안전하게 전송하는 간결하고 자급자족 방안입니다. 일반적으로 인증 및 정보 교환에 사용됩니다.
- 내용: JWT는 개체(일반적으로 사용자)에 대한 주장을 포함하며, 사용자 인증에 자주 사용됩니다. 주장은 사용자 ID, 역할, 권한 및 기타 관련 정보를 포함할 수 있습니다. JWT는 무상태 인증 시스템을 생성하는 데 자주 사용됩니다.
- 사용: JWT는 일반적으로 HTTP 요청에서 요청 헤더의 일부로 전송됩니다. 그것들은 사용자의 신원과 권한을 나타내는 데 사용됩니다.
OAuth (개방형 권한 부여):
- 목적: OAuth 는 권한 부여 프레임워크로, 제3자 애플리케이션이 사용자의 자원에 접근할 수 있도록 하여 사용자의 자격 증명을 노출하지 않도록 합니다. OAuth는 인증을 위한 것이 아니라 권한 위임을 위한 것입니다.
- 역할: OAuth는 자원 소유자, 클라이언트, 권한 부여 서버 및 자원 서버와 같은 역할을 정의합니다. 이를 통해 사용자가 자격 증명을 공유하지 않고도 다른 애플리케이션에 자원(예: 사진, 연락처)에 대한 접근을 부여할 수 있는 시나리오를 가능하게 합니다.
- 부여 유형: OAuth는 권한 부여 과정을 어떻게 수행해야 하는지를 지정하기 위해 부여 유형(권한 부여 코드, 암시적, 클라이언트 자격 증명, 비밀번호 등)을 도입합니다.
- 토큰: OAuth는 접근 토큰과 갱신 토큰의 사용을 포함합니다. 접근 토큰은 보호된 자원에 접근하는 데 사용되며, 갱신 토큰은 새로운 접근 토큰을 얻는 데 사용할 수 있습니다.
주요 차이점:
- 목적: JWT는 주로 인증 및 정보 교환에 사용되는 반면, OAuth는 권한 부여를 위한 프레임워크입니다.
- 내용: JWT는 사용자에 대한 주장을 포함하는 반면, OAuth는 역할과 권한을 정의하고 자원에 대한 접근을 관리하는 데 중점을 둡니다.
- 역할: JWT는 종종 사용자의 신원을 나타내는 데 사용되며, OAuth는 자원 소유자, 클라이언트, 권한 부여 서버 및 자원 서버와 같은 역할이 포함됩니다.
- 토큰: JWT는 인증을 위한 유형의 토큰인 반면, OAuth는 권한 관리를 위한 접근 토큰과 갱신 토큰을 도입합니다.
JWT는 어떻게 작동합니까?
JSON 웹 토큰(JWT)은 사용자의 신원을 확인하는 안전하고 효율적인 방법을 제공하여 인증에서 중요한 역할을 합니다. 이 과정은 일반적으로 다음 단계를 포함합니다:
- 사용자 인증: 사용자는 사용자 이름과 비밀번호 또는 Google이나 Facebook과 같은 외부 제공자를 통해 로그인합니다. 인증 서버는 자격 증명을 검증하고 사용자의 신원을 인증하는 JSON 웹 토큰(JWT)을 발급합니다.
- JWT 생성: ID 제공자(IdP)는 JWT를 생성하고, 이를 비밀 소금 또는 개인 키로 서명합니다. 이 JWT는 사용자 ID, 역할, 만료 시간과 같은 필수 사용자 정보를 캡슐화합니다.
- JWT 사용: 사용자의 클라이언트는 인증 중에 얻은 JWT를 안전하게 저장합니다. 보호된 자원에 접근할 때 클라이언트는 HTTP 인증 헤더에 JWT를 포함합니다.
- 토큰 검증: 자원 서버는 제공된 비밀 소금 또는 공개 키를 사용하여 JWT의 진위성을 디코딩하고 검증합니다. 이 과정은 토큰의 무결성과 출처를 보장합니다.
Apidog의 JWT
Apidog는 JSON 웹 토큰(JWT)을 관리하는 데 뛰어난 사용자 친화적인 API 개발 및 테스트 도구입니다. 직관적인 인터페이스를 통해 Apidog는 토큰 생성, 동적 관리 및 API 요청에 매끄럽게 포함시키는 과정을 단순화합니다.
이 도구는 API 개발의 JWT 관련 부분을 간소화하여 개발자들이 효율적인 테스트 및 통합에 집중할 수 있도록 합니다.