Lua Requires Chilkat v10.1.0+
Lua
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
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