Sample code for 30+ languages & platforms
Lua Requires Chilkat v10.1.0+

Create JWT using a Certificate's Private Key

See more JSON Web Token (JWT) Examples

Demonstrates how to create a JWT using a certificate's private key.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

-- Demonstrates how to create a JWT using an certificate's private key.

local cert = chilkat.Cert.new()

-- Load an ECC private key from a PEM file.
local success = cert:load_pfx_file("c:/temp/myPfx.pfx", "pfxPassword")
if not success then
    print(cert.last_error_text)
    return
end

local jwt = chilkat.Jwt.new()

-- Build the JOSE header
local jose = chilkat.JsonObject.new()
if cert:is_ecdsa() then
    -- Use ES256.  Pass the string "ES384" or "ES512" to use ECC with SHA-384 or SHA-512.
    jose:append_string("alg", "ES256")
else
    -- Probably RSA...
    -- Use RS256.  Pass the string "RS384" or "RS512" to use RSA with SHA-384 or SHA-512.
    jose:append_string("alg", "RS256")
end

jose:append_string("typ", "JWT")

-- Now build the JWT claims (also known as the payload)
local claims = chilkat.JsonObject.new()
claims:append_string("iss", "http://example.org")
claims:append_string("sub", "John")
claims:append_string("aud", "http://example.com")

-- Set the timestamp of when the JWT was created to now.
local curDateTime = jwt:gen_numeric_date(0)
claims:add_int_at(-1, "iat", curDateTime)

-- Set the "not process before" timestamp to now.
claims:add_int_at(-1, "nbf", curDateTime)

-- Set the timestamp defining an expiration time (end time) for the token
-- to be now + 1 hour (3600 seconds)
claims:add_int_at(-1, "exp", curDateTime + 3600)

-- Produce the smallest possible JWT:
jwt.auto_compact = true

-- Create the JWT token.
local token = jwt:create_jwt_cert(jose:emit(), claims:emit(), cert)

print(token)

-- Example output:
-- eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwOi8vZXhhbXBsZS5vcmciLCJzdWIiOiJKb2huIiwiYXVkIjoiaHR0cDovL2V4YW1wbGUuY29tIiwiaWF0IjoxNDg1NzA4NzkyLCJuYmYiOjE0ODU3MDg3OTIsImV4cCI6MTQ4NTcxMjM5Mn0.wqsuyJpxJ073ox-lOiLFqG1lQocXe4hGf2XGZJRrO3qn0UusxI_bu3Gzky8gBsH4sA4u9TWZn5M-1wYMMIJk6Q