Jwt Cpp Versions Save

A header only library for creating and validating json web tokens in c++

v0.7.0

5 months ago

Breaking Changes :warning:

Originally published in 0.7.0 Release Candidate 0

  • Allow generic access to JWT header and payload (#251)
    • get_payload_claims() was replaced by get_payload_json()
  • Removing extra exception aliases (#257)

Improvements

  • Allow moving decoded_jwt (#225) @Ka0o0
  • Add verify context trait template specialization (#229) @sirzooro
  • Allow to retrieve list of claims (#231) @Ka0o0
  • Use EVP_PKEY_up_ref if available (#238)
  • Support for Base64url with case insensitive padding (#219)
  • A NuGet package now exists (#262) @diogo-strube
  • Helper functions for converting DER to PEM format (#283) @dennisyakovlev
  • New docs for signing tokens (#316)

Bug fixes

  • Fix build with OPENSSL_NO_DEPRECATED (#228) @janblome
  • Fix as_date()'s std::bad_cast with decimal value (#240) @Prosperoh
  • Do not embed nlohmann::json directly, use find_package / FetchContent (#250) @sjanel
  • gcc-13 build (#287) @hlounent @vai-hanlo
  • Replace deprecated wstring_convert (#290) @JonasBorchelt
  • Corrected a few typos (#297) @criadoperez

Full Changelog: https://github.com/Thalhammer/jwt-cpp/compare/v0.6.0...v0.7.0

v0.7.0-rc.0

1 year ago

Breaking Changes :warning:

  • Allow generic access to JWT header and payload (#251)
    • get_payload_claims() was replaced by get_payload_json()
  • Removing extra exception aliases (#257)

Improvements

  • Allow moving decoded_jwt (#225) @Ka0o0
  • Add verify context trait template specialization (#229) @sirzooro
  • Allow to retrieve list of claims (#231) @Ka0o0
  • Use EVP_PKEY_up_ref if available (#238)
  • Support for Base64url with case insensitive padding (#219)

Bug fixes

  • Fix build with OPENSSL_NO_DEPRECATED (#228) @janblome
  • Fix as_date()'s std::bad_cast with decimal value (#240) @Prosperoh
  • Do not embed nlohmann::json directly, use find_package / FetchContent (#250) @sjanel

Full Changelog: https://github.com/Thalhammer/jwt-cpp/compare/v0.6.0...v0.7.0-rc.0

v0.6.0

2 years ago

New Features

  • Preliminary JWKs support by @Tchinmai7 :heart_decoration:
  • Implemented the "alg" ES256K
  • Adds support for Hunter Package Manager.
  • Add support for Boost.JSON (standalone C++17 variant)
  • Add WolfSSL v5.0.0 support
  • The example traits are now included in the JWT-CPP headers so everyone can use them.

Improvements

  • jwt::verifier has been refactored to accept a more generic "verification operation". There are no API breaks.
  • Support for OpenSSL 3.0.0 has been confirmed. 🤗 Thanks to @kleinmrk
  • Adjustments to the RSA implementation by @akyidrian for wider compatibility
  • Bump tested SSL options
  • Adding clang-tidy, cmake-format, and ASAN tests
  • Minimal key usage in RSA examples
  • Simplify reading of EC keys by @kleinmrk :heart_eyes_cat:

Breaking Changes ⚠️

  • jwt::picojson_traits became jwt::traits::kazuho_picojson #193

Improvements

  • Removed all deprecated OpenSSL v3.0.0 API calls @kleinmrk

Bug Fixes

  • Fixes to_lower that was actually doing a to_upper.
  • Allow relative paths when install CMake for Hunter
  • Fix shadow variables @XyFreak

Full Changelog: https://github.com/Thalhammer/jwt-cpp/compare/v0.5.1...v0.6.0

v0.6.0-rc.2

2 years ago

New Features

  • The example traits are now included in the JWT-CPP headers so everyone can use them.

Breaking Changes ⚠️

  • jwt::picojson_traits became jwt::traits::kazuho_picojson #193

Improvements

  • Removed all deprecated OpenSSL v3.0.0 API calls @kleinmrk

Bug Fixes

  • Allow relative paths when install CMake for Hunter

Full Changelog: https://github.com/Thalhammer/jwt-cpp/compare/v0.6.0-rc.1...v0.6.0-rc.2

v0.6.0-rc.1

2 years ago

New Features

  • Add support for Boost.JSON (standalone C++17 variant)
  • Add WolfSSL v5.0.0 support

Improvements

  • Bump tested SSL options
  • Adding clang-tidy, cmake-format, and ASAN tests
  • Minimal key usage in RSA examples
  • Simplify reading of EC keys by @kleinmrk :heart_eyes_cat:

Bug Fixes

  • Fix shadow variables @XyFreak

Full Changelog: https://github.com/Thalhammer/jwt-cpp/compare/v0.6.0-rc.0...v0.6.0-rc.1

v0.5.2

2 years ago

NOT FOR PUBLIC USE

v0.6.0-rc.0

2 years ago

New Features

  • Preliminary JWKs support by @Tchinmai7 💟
  • Implemented the "alg" ES256K
  • Adds support for Hunter Package Manager.

Improvements

  • jwt::verifier has been refactored to accept a more generic "verification operation". There are no API breaks.
  • Support for OpenSSL 3.0.0 has been confirmed. 🤗 Thanks to @kleinmrk
  • Adjustments to the RSA implementation by @akyidrian for wider compatibility

Bug Fixes

  • Fixes to_lower that was actually doing a to_upper.

Full Changelog: https://github.com/Thalhammer/jwt-cpp/compare/v0.5.1...v0.6.0-rc.1

v0.5.1

2 years ago

Removed Warnings

This release addresses a few minor (but irritating) warnings #134 #140

📦 CMake Scripts

Special thanks to @sweco-nlahoo 🤗 for helping correct the installed config file location and providing consumers to override the default locations with JWT_CMAKE_FILES_INSTALL_DIR.

Full Changelog: https://github.com/Thalhammer/jwt-cpp/compare/v0.5.0...v0.5.1

v0.5.0

3 years ago

⚠️ API breaks:

  • decode_jwt now requires a template argument for traits
  • builder now requires a template argument for traits
  • builder.set_audience() takes array_type (previously was a set)
    • replace std::vector<std::string>{"*"} with std::vector<picojson::value>{ picojson::value("*") }

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: https://github.com/Thalhammer/jwt-cpp/compare/v0.5.0-rc.0...v0.5.0

v0.5.0-rc.0

3 years ago

This RC features the introduction of jwt::basic_claim which is template around a traits object providing the implementation details for using the JSON library of your choosing. :tada:

For performance sensitive code, among other reasons, there is now the introduction of std::error_code support

auto verify = jwt::verify({}).allow_algorithm(jwt::algorithm::hs256{ "secret" });
std::error_code ec;
verify.verify(decoded_token, ec);
if(ec) {
   // handle failures
}

Special thanks to @faustocarva @matze @Sp3EdeR for their contribution helping make this RC possible :heart:

Full Changelog: https://github.com/Thalhammer/jwt-cpp/compare/v0.4.0...v0.5.0-rc.0