Skip to main content

Environment-driven JWT authentication for Cloudflare Workers Python with secret-name indirection

Project description

Flarelette JWT Kit

Flarelette JWT Kit

npm version PyPI version npm downloads PyPI downloads CI Status License Documentation

Environment-driven JWT authentication for Cloudflare Workers. Like Starlette, but for the edge.

Cross-language JWT toolkit (TypeScript + Python) with identical APIs. Automatically selects HS512 or EdDSA based on environment configuration, loads secrets via Cloudflare bindings, and works across Workers, Node.js, and Python runtimes.

Part of the Flarelette Ecosystem

Flarelette JWT Kit provides the core cryptographic operations for the Flarelette authentication stack. It's framework-neutral by design — use it directly for low-level JWT operations or through higher-level adapters like flarelette-hono for route guards and middleware integration.

Stack layers:

  • Your services → Use JWT auth in APIs and UIs
  • flarelette / flarelette-hono → Framework middleware and route guards
  • flarelette-jwt-kit (this package) → Core JWT signing, verification, and key management
  • Platform secrets → Cloudflare bindings, environment variables

Quick Start

Installation

TypeScript/JavaScript:

npm install @chrislyons-dev/flarelette-jwt

Python (Cloudflare Workers only):

pip install flarelette-jwt

Note: The Python package requires Cloudflare Workers Python runtime (Pyodide). For standard Python environments, use the TypeScript package via Node.js.

Basic Example

TypeScript:

import { sign, verify } from '@chrislyons-dev/flarelette-jwt'

// Sign a token (algorithm chosen from environment)
const token = await sign({ sub: 'user123', permissions: ['read:data'] })

// Verify a token
const payload = await verify(token)
if (payload) {
  console.log('Valid token:', payload.sub)
}

Python:

from flarelette_jwt import sign, verify

# Sign a token (algorithm chosen from environment)
token = await sign({"sub": "user123", "permissions": ["read:data"]})

# Verify a token
payload = await verify(token)
if payload:
    print(f"Valid token: {payload.get('sub')}")

Key Features

  • Algorithm auto-detection — Chooses HS512 or EdDSA based on environment variables
  • Secret-name indirection — References Cloudflare secret bindings instead of raw values
  • Identical TypeScript + Python APIs — Same function names and behavior across languages
  • Service bindings for JWKS — Direct Worker-to-Worker RPC for key distribution
  • Zero-trust delegation — RFC 8693 actor claims for service-to-service authentication
  • Policy-based authorization — Fluent API for composing permission and role requirements

Configuration

Configuration is entirely environment-driven. No config files required.

Common environment variables:

JWT_ISS=https://gateway.example.com    # Token issuer
JWT_AUD=api.example.com                 # Token audience
JWT_TTL_SECONDS=900                     # Token lifetime (default: 15 min)
JWT_LEEWAY=90                           # Clock skew tolerance (default: 90 sec)

HS512 mode (symmetric, shared secret):

JWT_SECRET_NAME=MY_JWT_SECRET           # Reference to secret binding

EdDSA mode (asymmetric, Ed25519):

# Producer (signs tokens):
JWT_PRIVATE_JWK_NAME=GATEWAY_PRIVATE_KEY
JWT_KID=ed25519-2025-01

# Consumer (verifies tokens):
JWT_PUBLIC_JWK_NAME=GATEWAY_PUBLIC_KEY
# OR for key rotation:
JWT_JWKS_SERVICE_NAME=GATEWAY_BINDING

Documentation

CLI Tools

Generate HS512 secrets:

npx flarelette-jwt-secret --len=64 --dotenv

Generate EdDSA keypairs:

npx flarelette-jwt-keygen --kid=ed25519-2025-01

Contributing

See CONTRIBUTING.md for development setup, coding standards, and release procedures.

License

MIT — see LICENSE for details.

Security

For security concerns or vulnerability reports, see docs/security-guide.md or open a security issue.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flarelette_jwt-1.8.3.tar.gz (22.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flarelette_jwt-1.8.3-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

Details for the file flarelette_jwt-1.8.3.tar.gz.

File metadata

  • Download URL: flarelette_jwt-1.8.3.tar.gz
  • Upload date:
  • Size: 22.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for flarelette_jwt-1.8.3.tar.gz
Algorithm Hash digest
SHA256 e8ea37e03bce6568d24c4d58ee85e35a4a9e73906ddd39ee65924e9e95835407
MD5 6b23581322cb50224b07ecdc0851ea92
BLAKE2b-256 2632a4d6e4af78fc25bb053a8aeeccfe647cc1e5fad5625f8c4e42b1f73064de

See more details on using hashes here.

File details

Details for the file flarelette_jwt-1.8.3-py3-none-any.whl.

File metadata

  • Download URL: flarelette_jwt-1.8.3-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for flarelette_jwt-1.8.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f9ff15ab8200a08029990dc55c9b4b13f04ffb3d3e7a30c453bf234610f19b91
MD5 f54e49e2c023c68f2638aee9990d8d2a
BLAKE2b-256 8499568e059b00748bd8e28da47d927a4c5fd7a88577830a9a9bcbeabf743990

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page