JWT: Difference between revisions

From IT Wiki
No edit summary
No edit summary
 
Line 1: Line 1:
;JSON Web Token
;JSON Web Token
;[https://tools.ietf.org/html/rfc7519 RFC 7519]
;RFC 7519
; 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달하는 방식
;두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달하는 방식


== 특징 ==
==특징==
* '''호환성'''
 
** C, Java, Python, C++, R, C#, PHP, JavaScript, Ruby, Go, Swift 등 대부분의 주류 프로그래밍 언어에서 지원
*'''호환성'''
* '''자가수용적(self-contained)'''
**C, Java, Python, C++, R, C#, PHP, JavaScript, Ruby, Go, Swift 등 대부분의 주류 프로그래밍 언어에서 지원
** JWT 는 필요한 모든 정보를 자체적으로 지님
*'''자가수용적(self-contained)'''
** JWT는 토큰에 대한 기본정보, 전달 할 정보(페이로드), 전자서명
**JWT 는 필요한 모든 정보를 자체적으로 지님
* '''쉽게 전달'''
**JWT는 토큰에 대한 기본정보, 전달 할 정보(페이로드), 전자서명
** 웹서버의 경우 HTTP의 헤더에 넣어서 전달 할 수도 있고, URL 의 파라미터로 전달 할 수도 있음
*'''쉽게 전달'''
**웹서버의 경우 HTTP의 헤더에 넣어서 전달 할 수도 있고, URL 의 파라미터로 전달 할 수도 있음
 
==구성==


== 구성 ==
;세 파트로 나뉘어지며, 각 파트는 점(.)에 의해 구분
;세 파트로 나뉘어지며, 각 파트는 점(.)에 의해 구분
ex) xxxxxxxxxxxx.yyyyyyyyyyyyyy.zzzzzzzzzzzzz
ex) xxxxxxxxxxxx.yyyyyyyyyyyyyy.zzzzzzzzzzzzz
* Header: 토큰의 타입과 해시 암호화 알고리즘으로 구성
 
* Payload: claim 정보 포함. userId, expire, scope 등
*'''Header''': 토큰의 타입과 해시 암호화 알고리즘으로 구성
* Signature: secret key를 포함하여 암호화한 서명정보
**토큰 타입, 해시 알고리즘은 사전 정의된 규격이며, 그 외의 Key-Value는 추가 가능
*'''Payload''': claim 정보 포함. userId, expire, scope 등 자유롭게 구성 가능
*'''Signature''': secret key를 포함하여 암호화한 서명 정보
 
== 예시 ==
'''header 원본:''' <syntaxhighlight lang="json">
{
  "alg": "HS256",
  "typ": "JWT"
}
</syntaxhighlight>'''payload  원본:'''<syntaxhighlight>
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
</syntaxhighlight>'''서명을 추가하여 생성된 토큰'''
 
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
 
* Base64(header) = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
* Base64(payload) = eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
* Base64(signature) = TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
 
== 절차 ==
[[파일:JWT 사용 절차.png|800x800픽셀]]
 
== 같이 보기 ==
 
* [[전자서명]]
 
== 관련 사이트 ==
 
* '''JOSE:''' http://jose.readthedocs.io/en/latest/
* '''JOSE''' '''Documents:''' https://datatracker.ietf.org/wg/jose/documents/
* '''AuthO:''' https://auth0.com/learn/json-web-tokens/
* '''JWT:''' https://jwt.io/

Latest revision as of 15:54, 16 May 2022

JSON Web Token
RFC 7519
두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달하는 방식

특징[edit | edit source]

  • 호환성
    • C, Java, Python, C++, R, C#, PHP, JavaScript, Ruby, Go, Swift 등 대부분의 주류 프로그래밍 언어에서 지원
  • 자가수용적(self-contained)
    • JWT 는 필요한 모든 정보를 자체적으로 지님
    • JWT는 토큰에 대한 기본정보, 전달 할 정보(페이로드), 전자서명
  • 쉽게 전달
    • 웹서버의 경우 HTTP의 헤더에 넣어서 전달 할 수도 있고, URL 의 파라미터로 전달 할 수도 있음

구성[edit | edit source]

세 파트로 나뉘어지며, 각 파트는 점(.)에 의해 구분

ex) xxxxxxxxxxxx.yyyyyyyyyyyyyy.zzzzzzzzzzzzz

  • Header: 토큰의 타입과 해시 암호화 알고리즘으로 구성
    • 토큰 타입, 해시 알고리즘은 사전 정의된 규격이며, 그 외의 Key-Value는 추가 가능
  • Payload: claim 정보 포함. userId, expire, scope 등 자유롭게 구성 가능
  • Signature: secret key를 포함하여 암호화한 서명 정보

예시[edit | edit source]

header 원본:

{
  "alg": "HS256",
  "typ": "JWT"
}

payload  원본:

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

서명을 추가하여 생성된 토큰

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

  • Base64(header) = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  • Base64(payload) = eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
  • Base64(signature) = TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

절차[edit | edit source]

800x800픽셀

같이 보기[edit | edit source]

관련 사이트[edit | edit source]