$ why-403
// HTTP 403 Forbidden is the protocol's foundation. It's a standard HTTP status code.
Wallets sign challenges. No custom transport. No new layer. Open standard, battle-tested semantics.
$ sdks
// 4 production-ready packages across TypeScript + Python
@openkitx403/clientTypeScript client with Solana wallet adapters and automatic 403 challenge flow
@openkitx403/serverTypeScript server SDK with Express and Fastify middleware, Ed25519 verification
openkitx403Python FastAPI middleware with Ed25519 verification and replay protection
openkitx403-clientPython client for server-side authentication with Solana keypairs
// Installation
TypeScript:
npm install @openkitx403/clientnpm install @openkitx403/serverPython:
pip install openkitx403pip install openkitx403-client$ protocol features
// Built for production, designed for developers
HTTP-Native
Standard HTTP 403 challenges, no custom protocols
Stateless Design
No required server-side session storage
Ed25519 Signatures
Cryptographic proof of wallet ownership
Replay Protection
Nonce-based prevention with configurable store
Request Binding
Signatures coupled to method, path, and origin
Token Gating
Built-in support for NFT/token requirements
Multi-Framework
Express, Fastify, FastAPI with drop-in middleware
Type-Safe
Full TypeScript support and Python type hints
Production Ready
Battle-tested, documented, and fully tested
4
Production packages
5,450+
Lines of code
100%
Open source
$ 403-challenge-flow
// 3-step cryptographic authentication
$ GET /protected
client initiates request to protected resource
$ 403 + nonce
server returns 403 with WWW-Authenticate header containing nonce
$ Sign & Retry
client signs challenge with wallet, retries with Authorization header
[RESULT]
Server verifies signature, request binding, and nonce validity. On success, returns 200 OK with protected resource. No passwords. No secrets stored on server.
$ installation & setup
TYPESCRIPT CLIENT
// Browser + Node.js
npm install @openkitx403/clientSupports Phantom, Backpack, and Solflare wallets
TYPESCRIPT SERVER
// Express + Fastify
npm install @openkitx403/serverDrop-in middleware with replay protection
PYTHON SERVER
// FastAPI
pip install openkitx403FastAPI middleware with async support
PYTHON CLIENT
// Server-side scripts
pip install openkitx403-clientAuthenticate with Solana keypairs
// Quick Start
1. Install package
npm install @openkitx403/client2. Connect wallet
await client.connect('phantom')3. Authenticate
await client.authenticate({ resource: 'https://api.example.com' })Type-Safe
Full TypeScript support and Python type hints
Well Tested
800+ lines of tests across all packages
Documented
Complete docs, examples, and protocol spec
$ quick start
// browser client
$ install
npm install @openkitx403/client// express server
$ install
npm install @openkitx403/server express// python fastapi
$ install
pip install openkitx403 fastapi// python client
$ install
pip install openkitx403-client[MORE_EXAMPLES]
> See USAGE_EXAMPLES.md in the source package for 8 complete sections including Node.js, Fastify, LangChain integration, and AI agent patterns.
$ security --model
ed25519 signatures . cryptographic proof of wallet ownership
request binding . signatures coupled to method, path, origin
replay protection . nonce validation + timestamp checks
zero key exposure . private keys never leave wallet
stateless verification . scale without session management