JWT 1. 소개와 기본 개념

agnusdei·2023년 7월 27일
0

JWT(Jason Web Token)는 웹 환경에서 정보를 안전하게 전달하기 위해 사용되는 인증 방식 중 하나입니다. 주로 클라이언트와 서버 간의 인증에 활용되며, 사용자의 인증 정보를 토큰 형태로 표현합니다. JWT는 JSON(JavaScript Object Notation) 형식으로 데이터를 표현하며, 디지털 서명을 사용하여 정보의 무결성을 보장합니다.

JWT의 구조와 구성 요소:
JWT는 세 부분으로 구성되어 있습니다. 각 부분은 점(".")으로 구분되어 있습니다.

  1. Header(헤더): JWT의 유형과 알고리즘에 대한 정보를 담고 있습니다.
    예시:

    {
      "alg": "HS256",
      "typ": "JWT"
    }
    • alg: 토큰을 서명하는 데 사용되는 해시 알고리즘 (예: HMAC SHA256, RSA 등)
    • typ: 토큰의 유형을 지정, 대개 "JWT"로 설정됩니다.
  2. Payload(페이로드): JWT에 포함될 정보들을 담고 있습니다.
    예시:

    {
      "sub": "user123",
      "name": "John Doe",
      "role": "admin",
      "exp": 1673372400
    }
    • sub: 토큰이 제공하는 주제 (subject), 주로 사용자의 식별자가 됩니다.
    • name: 사용자 이름 등 추가 정보를 포함할 수 있습니다.
    • role: 사용자 역할 (예: admin, user 등)을 지정할 수 있습니다.
    • exp: 토큰의 만료 시간을 나타냅니다. Unix 시간 형식으로 표현됩니다.
  3. Signature(서명): 헤더와 페이로드를 조합하여 서버에서 생성된 서명 값입니다. 이를 통해 토큰이 변조되지 않았는지를 검증할 수 있습니다.
    예시:

    HMACSHA256(
      base64UrlEncode(header) + "." + base64UrlEncode(payload),
      secret
    )
    • 서명 생성에 사용되는 비밀 키(secret)는 서버 측에서만 알고 있어야 합니다.

JWT의 장점과 활용 사례:
1. 간결하고 자가수용적(Self-contained): JWT는 필요한 모든 정보를 자체적으로 포함하고 있기 때문에 별도의 세션 저장소가 필요하지 않습니다. 이로 인해 서버에서 세션 관리를 하지 않아도 되므로 확장성이 높아집니다.

  1. 보안적인 측면: JWT는 서명을 통해 변조 여부를 확인하며, 비밀 키를 알고 있는 서버만이 유효한 토큰을 생성할 수 있습니다. 따라서 클라이언트가 토큰을 조작하더라도 검증이 불가능합니다.

  2. 널리 지원 및 사용이 편리: JWT는 간단한 문자열로 이루어져 있어서 URL, HTTP 헤더, HTML 등 다양한 방법으로 전송이 가능하며, 다양한 플랫폼과 언어에서 지원되고 있습니다.

  3. 단일 인증(Single Sign-On): JWT를 사용하면 여러 애플리케이션에서 한 번의 로그인으로 여러 서비스에 접근할 수 있는 단일 인증 기능을 구현할 수 있습니다. 사용자 정보를 포함한 JWT를 발급하여 각 서비스에서 검증하고 인증을 처리할 수 있습니다.

  4. 인증과 권한 부여: JWT는 사용자의 역할과 권한 정보를 포함할 수 있으므로, 클라이언트에서 해당 정보를 추출하여 사용자의 권한을 확인하고 필요한 서비스에 접근을 제한하는데 사용할 수 있습니다.

JWT는 웹 및 모바일 애플리케이션에서 인증과 보안을 강화하고 단일 인증 기능을 구현하는 등 다양한 사례에서 활용되고 있습니다. 하지만 JWT가 모든 상황에 적합하지는 않으며, 보안 상 주의해야 할 사항들이 있으므로 적용 시에는 신중한 판단과 추가적인 보안 검토가 필요합니다.

profile
DevSecOps ⚙️ + Pentest 🚩

0개의 댓글