Skip to content

Latest commit

 

History

History
50 lines (41 loc) · 2.74 KB

19.md

File metadata and controls

50 lines (41 loc) · 2.74 KB

JWT에 대해서 간단히 설명해주세요.

로마

  • JWT(Json Web Token)는 웹 표준(RFC 7519)으로 JSON 객체를 이용하여 정보를 안전하고 간결하게 전송할 수 있는 토큰을 의미합니다.

JWT 구조

  • xxxxx.yyyyy.zzzzz 이런 구조를 가지고 있습니다.
  • Header : 맨 앞 부분(x자리)에는 일반적으로 토큰의 유형(typ)과 SHA256, RSA와 같은 서명 알고리즘(alg) 두 부분으로 구성됩니다.
{
    "alg": "HS256",
    "typ": "JWT"
}
  • Payload : 가운데 부분(y자리)에는 토큰에서 사용하 정보의 조각(Claim) 들이 담겨있다.
     {
         "sub": "1234567890",
         "name": "John Doe",
         "admin": true
     }
    • 클레임의 종류 : Registered, public, private
    • Registered Claims : 필수는 아니지만 추천되는 미리 정의된 클레임들을 의미한다. iss(발급자), exp(만료기간), sub(주제) 등이 있다.
    • Public Claims : 공개 정보용 클레임, 충돌 방지를 위해 URI 포맷을 이용
    • Private Claims : 비공개 클레임, 서버와 클라이언트 사이에 임의로 지정한 정보를 저장
  • Signature : 마지막 부분(z자리)는 서명을 나타냅니다. 서명은 인코딩된 헤더, 페이로드, secret, 헤더에 적힌 알고리즘을 가져와서 만들게 됩니다.
    HMACSHA256(
        base64UrlEncode(header) + "." +
        base64UrlEncode(payload),
        secret)
    • 서명을 통해 메세지가 도중에 변경되었는지 위변조를 판단하게 됩니다.
    • Signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할 수 없다.

JWT 특징

  • JWT의 가장 큰 특징은 서명된 토큰이라는 점 입니다. 서버에서 토큰에 시크릿키를 이용해 서명을 하고 클라이언트로 발행을 해주기 때문에 받은 토큰을 확인하고 이 토큰이 서버에서 발행한 토큰이 맞는지 검증할 수 있게 됩니다. 따라서 안전한 인증이 가능하죠.
  • 발행한 토큰은 위변조로부터는 보호되지만 내부의 헤더와 페이로드를 누구나 디코딩할 수 있습니다. 그렇기 때문에 내부의 값에 프라이빗한 내용을 담으면 안됩니다.
  • url-safe 한 인코딩을 합니다.(base64url) URL에서도 오류없이 사용할 수 있게 '+', '/' 와 같은 연산자를 각각 escape하여 다른 문자로 치환하여 인코딩합니다.

참고자료