JWT: Difference between revisions
From IT Wiki
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
;JSON Web Token | ;JSON Web Token | ||
; | ;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]
같이 보기[edit | edit source]
관련 사이트[edit | edit source]
- 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/