Something went wrong. Try again.
A JWT library for Gleam
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667import gleam/dynamic/decodeimport gleam/ioimport gleam/jsonimport gleam/stringimport gleam/time/durationimport ywtimport ywt/algorithmimport ywt/claimimport ywt/verify_key
pub fn main() -> Nil { // Generate a new, random signing key let signing_key = ywt.generate_key(algorithm.es384)
// Create user payload data let payload = [ #("sub", json.string("user123")), #("role", json.string("admin")), ]
// Define security claims let claims = [ claim.expires_at(max_age: duration.hours(1), leeway: duration.minutes(5)), claim.issuer("https://auth.myapp.com", []), claim.audience("https://api.myapp.com", []), ]
// Create and sign the JWT let jwt = ywt.encode(payload, claims, signing_key) io.println("Signed JWT: " <> jwt)
// Extract verification key (for distribution to other services) let verify_key = verify_key.derived(signing_key) io.println( "Public verification key: " <> json.to_string(verify_key.to_jwk(verify_key)), )
// Verify the JWT let decoder = { use id <- decode.field("sub", decode.string) use role <- decode.field("role", decode.string) decode.success(#(id, role)) }
let result = ywt.decode(jwt, using: decoder, claims:, keys: [verify_key])
case result { Ok(#(id, role)) -> { io.println("JWT verified successfully!") io.println("User id: " <> id) io.println("User role: " <> role) }
Error(ywt.TokenExpired(_expired_at)) -> { io.println("Token expired!") }
Error(ywt.InvalidSignature) -> { io.println("Invalid signature - token may be forged") }
Error(error) -> { io.println("JWT verification failed: " <> string.inspect(error)) } }}