Sapling Logo
SDK authentication quickstart

C++ JWT Generator

Sign a short-lived Sapling SDK credential in C++ without exposing your private API key to browser code.

  • HS256 signature
  • Server-side only
  • Public + private keys
SIGN C++ logo C++ HS256 · sub + exp

C++ JWT generator quickstart

Create a token with your public API key in the sub claim, a near-term Unix timestamp in exp, and an HS256 signature made with your private API key.

Sapling JWTs use HS256 with a sub claim containing your public API key and an exp claim containing a Unix timestamp. The examples use a one-hour lifetime; shorten it further when your application can refresh tokens easily.
C++ HS256 · sub + exp

This example uses jwt-cpp.

#include <chrono>
#include <cstdlib>
#include <iostream>
#include <jwt-cpp/jwt.h>
#include <stdexcept>

int main() {
  const char* public_key = std::getenv("SAPLING_PUBLIC_KEY");
  const char* private_key = std::getenv("SAPLING_PRIVATE_KEY");
  if (public_key == nullptr || private_key == nullptr) {
    throw std::runtime_error(
        "Set SAPLING_PUBLIC_KEY and SAPLING_PRIVATE_KEY first.");
  }

  const auto token = jwt::create()
      .set_type("JWT")
      .set_subject(public_key)
      .set_expires_at(std::chrono::system_clock::now() + std::chrono::hours{1})
      .sign(jwt::algorithm::hs256{private_key});

  std::cout << token << '\n';
}
Generated token text/plain
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<base64url-claims>.<signature>

Return the compact token to the browser and pass it to Sapling.init as the key. Issue a fresh token after it expires; never send the private key.

About C++

C++ is an object-oriented programming language that provides a superset of features of C. It is a popular choice for large programming projects that require the performance characteristics of C but want code organized as classes. Cross-platform applications developed with the Qt framework typically are written in C++.