SW/앱플랫폼

앱 플랫폼 개발 : JWT ( 개념, 정의, 구조 )

얇은생각 2019. 4. 13. 12:30
반응형



JSON 웹 토큰이란?

JSON Web Token(JWT)은 당사자 간에 안전하게 정보를 전송하기 위한 컴팩트하고 포함적인 방법을 JSON 오브젝트로 정의하는 개방형 표준(RFC 7519)입니다. 이 정보는 디지털 서명되어 있기 때문에 검증되고 신뢰할 수 있습니다. JWT는 비밀(HMAC 알고리즘 포함) 또는 RSA 또는 ECDSA를 사용하는 공개/프라이빗 키 쌍을 사용하여 서명할 수 있습니다.


비록 JWT는 당사자간의 비밀도 제공하기 위해 암호화될 수 있지만, 서명된 토큰에 초점을 맞출 것입니다. 서명된 토큰은 그 안에 포함된 청구권의 무결성을 검증할 수 있는 반면, 암호화된 토큰은 그러한 청구를 다른 당사자들로부터 숨길 수 있습니다. 공용/개인 키 쌍을 사용하여 토큰을 서명할 때, 서명은 또한 개인 키를 보유한 당사자만이 토큰에 서명했음을 증명합니다.



언제 JSON 웹 토큰을 사용해야 하는가?

다음은 JSON 웹 토큰이 유용한 몇 가지 시나리오 입니다.



권한 부여

JWT를 사용하기 위한 가장 일반적인 시나리오입니다. 일단 사용자가 로그인하면, 각 후속 요청에는 JWT가 포함될 것이며, 사용자는 이 토큰으로 허용된 경로, 서비스 및 자원에 접근할 수 있습니다. Single Sign On은 작은 오버헤드와 다양한 도메인에서 쉽게 사용할 수 있는 기능 때문에 오늘날 JWT를 널리 사용하는 기능입니다.



정보 교환

JSON 웹 토큰은 당사자 간에 안전하게 정보를 전송하는 좋은 방법입니다. JWT는 (예를 들어 공용/개인 키 쌍을 사용하여) 서명될 수 있기 때문에 송신자가 말하는 그대로임을 확신할 수 있습니다. 또한 헤더와 페이로드로 서명이 계산되므로 내용이 변조되지 않았는지도 확인할 수 있습니다.



JSON 웹 토큰 구조는 무엇인가?

JSON Web Tokens는 컴팩트한 형태로 점()으로 분리된 세 부분으로 구성되어 있으며, 다음과 같습니다.


헤더

페이로드

서명


따라서 JWT는 전형적으로 다음과 같습니다.


xxxx.yyyyy.zzz


서로 다른 부분을 분해해 봅시다.



헤더

헤더는 일반적으로 토큰 유형(JWT)과 HMAC SHA256 또는 RSA와 같이 사용되는 서명 알고리즘의 두 부분으로 구성됩니다.



페이로드

토큰의 두 번째 부분은 클레임이 포함된 페이로드입니다. 클레임은 기업(일반적으로 사용자)과 추가 데이터에 대한 진술입니다. 클레임은 등록, 공개 청구, 비공개 청구 등 3가지 유형이 있습니다.


등록된 클레임 : 이는 유용하고 상호운용 가능한 클레임 집합을 제공하기 위해 의무적인 것이 아니라 권장되는 사전 정의된 클레임 집합입니다. 그 중에는 iss(발신), 엑스포(발신시간), 서브(주체), 오디션(청중) 등이 있습니다.


공공청구 : JWT를 사용하는 사람들에 의해 마음대로 정의될 수 있습니다. 그러나 충돌을 피하려면 IANA JSON 웹 토큰 레지스트리에서 정의하거나 충돌 저항성 네임스페이스를 포함하는 URI로 정의해야 합니다.


사적 청구 : 이러한 청구는 해당 청구서의 사용에 동의하며 등록되거나 공개 청구되지 않는 당사자 간에 정보를 공유하기 위해 만들어진 관습 청구입니다.



서명

암호화된 헤더, 암호화된 페이로드, 비밀, 헤더에 지정된 알고리즘을 사용하여 서명해야 하는 시그니처 부품을 생성해야 합니다.


서명은 도중에 메시지가 변경되지 않았음을 확인하는 데 사용되며, 개인 키로 서명한 토큰의 경우, JWT의 송신자가 누구인지를 확인할 수도 있습니다.



모두 합쳐서

출력은 HTML과 HTTP 환경에서 쉽게 통과할 수 있는 점으로 구분된 3개의 Base64-URL 문자열로, SAML과 같은 XML 기반 표준에 비해 더 컴팩트합니다.


JWT를 사용하여 이러한 개념을 실행하려면 jwt.io 디버거를 사용하여 JWT를 디코딩, 검증 및 생성해야 합니다.



JSON Web Tokens는 어떻게 작동하는가?

인증에서 사용자가 자신의 자격 증명을 사용하여 성공적으로 로그인하면 JSON 웹 토큰이 반환됩니다. 토큰은 자격증이기 때문에 보안 문제가 발생하지 않도록 각별히 주의해야 합니다. 일반적으로 토큰을 필요 이상으로 오래 보관해서는 안 됩니다.


사용자가 보호된 경로나 리소스에 액세스하려는 경우 사용자 에이전트는 일반적으로 베어러 스키마를 사용하여 인증 헤더에 JWT를 전송해야 한다. 



왜 우리가 JSON 웹 토큰을 사용해야 하는가?

Simple Web Tokens(SWT) 및 SAML(Security Assertion Markup Language Tokens)과 비교할 때 JWT(JON Web Tokens)의 이점에 대해 알아보겠습니다.


JSON은 XML보다 장황하지 않기 때문에 인코딩될 때 그 크기 또한 작아져 JWT가 SAML보다 더 작아집니다. 따라서 JWT는 HTML과 HTTP 환경에서 통과하기에 좋은 선택입니다.


보안상 SWT는 HMAC 알고리즘을 사용하여 공유된 비밀에 의해서만 대칭적으로 서명될 수 있습니다. 그러나, JWT와 SAML 토큰은 서명을 위해 X.509 인증서의 형태로 공용/개인 키 쌍을 사용할 수 있습니다. JSON의 단순성에 비해, 불명확한 보안 구멍을 도입하지 않고 XML 디지털 서명으로 XML을 서명하는 것은 매우 어렵습니다.


JSON 파서는 객체에 직접 매핑되기 때문에 대부분의 프로그래밍 언어에서 일반적입니다. 반대로, XML은 자연적인 문서와 객체 간 매핑을 가지고 있지 않습니다. 이것은 SAML의 주장보다 JWT와 함께 일하는 것을 더 쉽게 만듭니다.


인터넷 규모로 JWT를 이용하고 있습니다. 이는 여러 플랫폼, 특히 모바일에서 JSON 웹 토큰의 클라이언트 측 처리 용이성을 강조합니다.

반응형