JMT? JWT!

xgro·2022년 7월 31일
0

JSON 웹 토큰이란?

JWT(JSON Web Token)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 자체 포함된 방법을 정의하는 개방형 표준(RFC 7519)입니다.

서명된 토큰은 그 안에 포함된 클레임의 무결성을 확인할 수 있는 반면 암호화된 토큰은 이러한 클레임을 다른 당사자로부터 숨길 수 있습니다.

공개/개인 키 쌍을 사용하여 토큰에 서명할 때 서명은 개인 키를 보유하고 있는 당사자만 서명했음을 증명합니다.

언제 사용하나요?

  1. 권한 부여

    사용자가 로그인하면 이후 발생하는 각각의 요청에 JWT를 포함하여 해당 토큰을 이용하여 허용되는 경로, 서비스 및 리소스의 엑세스를 제어할 수 있습니다.

  2. 정보 교환

    JSON 웹 토큰은 당사자 간에 정보를 안전하게 주고 받을 수 있습니다. 예를 들어 공개/개인 키 쌍을 사용하여 JWT에 서명할 수 있기 때문에 발신자가 누구인지 확인할 수 있습니다. 또한 헤더와 페이로드를 사용하여 서명을 계산하므로 콘텐츠가 변조되지 않았는지 확인할 수도 있습니다.

JSON Web Token 구조

JWT는 다음과 같은 구조로 이루어져 있습니다.

헤더

헤더는 일반적으로 JWT인 토큰 유형과 HMAC SHA256 또는 RSA와 같은 서명을 위한 알고리즘 두 부분으로 구성됩니다.

# for example
{
  "alg": "HS256",
  "typ": "JWT"
}

페이로드

토큰의 두번째 부분으로서 Claim을 포함합니다. Claim은 일반적으로 사용자 및 추가 데이터에 대한 설명입니다.

Registered claims

필수는 아니지만 상호 운용 가능한 클레임 집합을 제공하기 위해 사전에 정의된 클레임 집합입니다.

Public claims:

JWT를 사용하는 사람들이 마음대로 정의할 수 있는 클레임입니다.

Private claims:

정보를 공유하기위해 생성된 맞춤 클레임입니다.

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

시그니처

시그니처 부분을 생성하기 위해서는 인코딩된 헤더, 인코딩된 페이로드, secret, 헤더에 지정된 알고리즘을 가져와서 시그니처를 생성해야 합니다.

시그니처는 메시지가 도중에 변경되지 않았는지 확인하는데 사용되며 개인키로 서명된 토큰의 경우 JWT의 보낸 사람이 누구인지 확인할 수도 있습니다.

profile
안녕하세요! DevOps 엔지니어 이재찬입니다. 블로그에 대한 피드백은 언제나 환영합니다! 기술, 개발, 운영에 관한 다양한 주제로 함께 나누며, 더 나은 협업과 효율적인 개발 환경을 만드는 과정에 대해 인사이트를 나누고 싶습니다. 함께 여행하는 기분으로, 즐겁게 읽어주시면 감사하겠습니다! 🚀

0개의 댓글