JWT - JSON Web Token

최고요·2023년 4월 27일
2

JWT V1 

목록 보기
2/15
post-thumbnail

JSON Web Token(JWT)은 웹 표준으로 정의된 JSON 기반의 토큰입니다.
JWT는 인증이나 권한 부여에 사용되며, 토큰 자체가 필요한 모든 정보를 포함합니다. 토큰은 서명되어 있어 변조가 불가능하며, 서명을 통해 유효성 검증이 가능합니다.

JWT는 세 부분으로 구성됩니다. 첫 번째는 Header로서, 토큰의 타입과 사용하는 암호화 알고리즘에 대한 정보가 담겨 있습니다. 두 번째는 Payload로서, 토큰에 담길 클레임(claim) 정보가 포함됩니다. 클레임은 사용자 정보나 권한 등을 포함할 수 있으며, 등록된 클레임(registered claim), 공개 클레임(public claim), 비공개 클레임(private claim)으로 나뉩니다. 세 번째는 Signature로서, Header와 Payload를 인코딩한 후, 서버에서 발급된 비밀키를 사용하여 인증 정보를 포함한 서명이 포함됩니다.

JWT는 토큰 자체가 필요한 모든 정보를 포함하고 있어, 토큰을 검증하고 유저 정보를 추출하는 작업이 쉽고 효율적입니다. 또한, 토큰이 서명되어 있기 때문에, 토큰 자체가 변조되었는지 확인 가능합니다. 이러한 특징으로 JWT는 인증 및 권한 부여에 자주 사용되며, OAuth2.0 등의 프로토콜에서도 사용됩니다.


JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA



JSON Web Tokend 의 구조

  • Header
    - 어떤 알고리즘을 사용했고, 어떤 타입인지
  • Payload
    - 사용자 및 추가 데이터에 대한설명
  • Signature
    - Header와 Payload를 Base64Url로 인코딩한 문자열에 서버 측에서 가지고 있는 비밀키로 HMACSHA256 또는 RSA와 같은 알고리즘을 사용하여 서명한 값

    HHHHHH-PPPPPP-SSSSSS




클라이언트가 서버에 로그인 요청을 보냈을 때 인증이 완료되면서 서버는 JWT를 생성합니다.
JWT는
header-payload-{ HMAC으로 암호화한 Signature (header+payload+secret Key) }
를 각 Base64로 인코딩하여 클라이언트에게 돌려줍니다.

로그인이 완료된 클라이언트가 서버에 개인정보를 확인할 수 있는 마이페이지를 요청할 때
HTTP 요청 헤더인 Authorization 필드에 JWT를 담아서 서버에 보냅니다.
JWT를 받은 서버는 Signature를 통해 토큰이 변조되지 않았는지 확인하고 신뢰할 수 있는 토큰인지 판단합니다.
서버는 JWT를 받은 후, Header와 Payload를 다시 Base64Url 디코딩하여 Signature를 검증하고, Signature가 일치한다면 해당 토큰을 신뢰할 수 있는 토큰으로 간주합니다.


참고>

  • HMAC(keyed-hash message authentication code, hash-based message authentication code)는 암호화 해시 함수와 기밀 암호화 키를 수반하는 특정한 유형의 메시지 인증 코드(MAC)
  • SHA-256은 SHA(Secure Hash Algorithm) 알고리즘의 한 종류
  • 인코딩(encoding)은 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식
  • Binary Data란 0과 1로 이루어진 데이터
  • Base64 Encoding은 Binary Data를 Text로 변경하는 Encoding
profile
i'm best

0개의 댓글