C++11에서 JSON 웹 토큰을 생성하고 검증하기 위한 헤더 전용 라이브러리입니다. 훌륭한 소개를 보려면 이것을 읽어보세요.
목표는 다양하고 보편적으로 적용 가능한 알고리즘, 클래스 및 데이터 구조 컬렉션을 제공하여 이미 사용하고 있는 다른 라이브러리와의 적응성과 원활한 통합을 촉진하는 것입니다.
jwt-cpp는 표준에 명시된 모든 알고리즘을 포괄적으로 지원합니다. 모듈식 설계로 인해 복잡한 문제 없이 추가 알고리즘을 원활하게 포함할 수 있습니다. 새로운 알고리즘에 기여하고 싶다면 언제든지 끌어오기 요청을 시작하거나 문제를 열어주세요.
완전성을 위해 지원되는 모든 알고리즘 목록은 다음과 같습니다.
HMSC | RSA | ECDSA | PSS | EdDSA |
---|---|---|---|---|
HS256 | RS256 | ES256 | PS256 | Ed25519 |
HS384 | RS384 | ES384 | PS384 | Ed448 |
HS512 | RS512 | ES512 | PS512 | |
ES256K |
설치 지침은 여기에서 확인할 수 있습니다.
간단한 예는 토큰을 디코딩하고 해당 클레임을 모두 인쇄하는 것입니다. 시도해 보세요.
# include < jwt-cpp/jwt.h >
# include < iostream >
int main () {
std::string token = " eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJpc3MiOiJhdXRoMCIsInNhbXBsZSI6InRlc3QifQ.lQm3N2bVlqt2-1L-FsOjtR6uE-L4E9zJutMWKIe1v1M " ;
auto decoded = jwt::decode (token);
for ( auto & e : decoded. get_payload_json ())
std::cout << e. first << " = " << e. second << std::endl;
}
리포지토리를 복제한 후 로컬에서 이 예제를 빌드하고 실행할 수 있습니다. 일부 명령을 실행하면 JWT 페이로드의 내용을 볼 수 있습니다.
cmake .
cmake --build . --target print-claims
./print-claims
# iss = "auth0"
# sample = "test"
JWT는 암호화되지 않고 오히려 암호화 방식으로 서명되어 부인 방지 기능을 제공한다는 사실을 금방 알 수 있습니다.
토큰을 검증하려면 먼저 검증자를 구축하고 이를 사용하여 디코딩된 토큰을 검증합니다.
auto verifier = jwt::verify()
.with_issuer( " auth0 " )
.with_claim( " sample " , jwt::claim(std::string( " test " )))
.allow_algorithm(jwt::algorithm::hs256{ " secret " });
verifier.verify(decoded_token);
검증자는 상태 비저장이므로 다른 토큰에 재사용할 수 있습니다.
위의 토큰을 생성하고 서명하는 것도 마찬가지로 쉽습니다.
auto token = jwt::create()
.set_type( " JWS " )
.set_issuer( " auth0 " )
.set_payload_claim( " sample " , jwt::claim(std::string( " test " )))
.sign(jwt::algorithm::hs256{ " secret " });
더 많은 고유 토큰을 발행하거나 확인하려는 경우 RSA 공개 및 개인 키, 타원 곡선 토큰 등을 사용하는 예제를 확인하세요!
유연성을 제공한다는 목표를 바탕으로 구축되었습니다.
jwt-cpp는 OpenSSL, LibreSSL 및 WolfSSL을 지원합니다. 테스트된 버전 목록을 보려면 이 페이지에서 자세한 내용을 확인하세요.
이 맥락에서는 특정 JSON 라이브러리에 엄격하게 의존하지 않습니다. 대신, jwt-cpp는 유형 특성을 기반으로 템플릿화된 일반 jwt::basic_claim
활용합니다. 이 특성은 값, 객체, 배열, 문자열, 숫자, 정수 및 부울에 대한 의미론적 JSON 유형과 이들 사이를 원활하게 변환하는 방법을 제공합니다.
이 디자인은 요구 사항에 가장 적합한 JSON 라이브러리를 선택할 수 있는 유연성을 제공합니다. 제공된 JSON 특성 중 하나를 활용하려면 docs/traits.md에서 자세한 지침을 참조하세요.
jwt::basic_claim<my_favorite_json_library_traits> claim (json::object({{ " json " , true },{ " example " , 0 }}));
특성 구현을 작성하는 방법을 배우려면 다음 지침을 확인하세요.
JWT의 base64 사양과 관련하여 이 라이브러리에는 필요한 모든 변형을 포함하는 base.h
포함되어 있습니다. 라이브러리 자체는 능숙한 base64 구현을 제공하지만, base64 구현은 널리 사용 가능하며 다양한 성능 수준을 보여준다는 점은 주목할 가치가 있습니다. 자체 base64 구현을 사용하려는 경우 JWT_DISABLE_BASE64
정의하여 jwt-cpp 구현을 제외하는 옵션이 있습니다.
개선을 위한 제안 사항이 있거나 버그를 발견한 경우, 주저하지 말고 문제를 공개하거나 끌어오기 요청을 작성하여 기여해 주세요. 버그를 보고할 때 문제 재현을 용이하게 할 수 있도록 컴파일러 버전 및 기타 관련 정보를 포함하여 환경에 대한 포괄적인 세부 정보를 제공하십시오. 또한 새로운 기능을 도입하는 경우 기능을 검증하기 위해 해당 테스트 사례를 포함해야 합니다.
jwt-cpp를 사용하려면 다음 도구가 필요합니다.
테스트 케이스를 구축하려면 다음이 필요합니다.
팁은 FAQ를 참조하세요.