Generic JSON and more algorithms
⚠️ API breaks:
decode_jwt
now requires a template argument for traitsbuilder
now requires a template argument for traitsbuilder.set_audience()
takesarray_type
(previously was a set)- replace
std::vector<std::string>{"*"}
withstd::vector<picojson::value>{ picojson::value("*") }
- replace
Generic basic_claim
Depending on your application needs you might choose one JSON library over another, there's a lot of great choices.
To freely choose whichever is best for your application define your own traits.
jwt::basic_claim<my_favorite_json_library_traits> claim(json::object({{"json", true},{"example", 0}}));
If you implement traits support for a library, please 🙏 submit a pull request to let us know!
EdDSA Support
Special thanks to @Sp3EdeR for their great work 🏆
With the additional algorithms, you can use the jwt::create()
and jwt::verify()
for handling your tokens
auto token = jwt::create().set_issuer("auth0").set_type("JWS").sign(
jwt::algorithm::ed25519("", ed25519_priv_key, "", "")); // New algorithms have been added
// ...
auto decoded = jwt::decode(token);
jwt::verify().allow_algorithm(
jwt::algorithm::ed25519(ed25519_pub_key, "", "", "")) // New algorithms have been added
.verify(decoded);
Base64 DER encoded to PEM helper
Round of applause for @jbajwa for bringing more JOSE support to the library
When working with OAuth2 and OpenID, it's very common to obtain the public key for verifying tokens from JWK.
If the public key is exposed with the "x5c"
you can use a helper to convert it to PEM which is consumed by the jwt::verifier
auto public_cert = jwt::helper::convert_base64_der_to_pem(x5c_base64_der, ec);
auto verify = jwt::verify().allow_algorithm(jwt::algorithm::rs256(public_cert, "", "", ""));
LibreSSL Support
Along with other freedom for JSON libraries there may be a motivating factor for your crypto needs, there for we have expanded support to include LibreSSL.
This can be configured through CMake
cmake .. -DJWT_SSL_LIBRARY:STRING="LibreSSL"
If you prefer the header only approach, make sure to define LIBRESSL_VERSION_NUMBER
before including jwt.h
#include <tls.h>
#include "jwt-cpp/jwt.h"
📓 If you have both OpenSSL and LibreSSL installed, they may be in conflict which can produce compile or runtime errors
Numerous other contributions were submitted by @Zxey @sdmg15 @aboseley @mbaykara 👏 Thank you!
Full Changelog: v0.5.0-rc.0...v0.5.0