Skip to main content

API Key Gateway

A Python library that provides an @apikey_login decorator to validate API keys with service-aware authentication.

Features

  • CLI Decorator: Automatically adds --apikey/-a CLI parameter to decorated functions
  • FastAPI Middleware: Built-in support for FastAPI applications
  • Strong Security: Validates API keys using argon2id hashing algorithm
  • Service-Aware: Keys are scoped to specific services
  • Remote Key Management: Fetches valid public keys from a remote JSON endpoint
  • Caching: Caches valid API key-service pairs for improved performance
  • Retry Mechanism: Automatically retries fetching keys on network failures
  • Flexible Configuration: Supports custom API key URLs and authentication headers

Installation

uv install apikey-gateway

Usage

The library supports two usage modes: CLI Decorator and FastAPI Middleware.

CLI Decorator

The apikey_login decorator automatically adds --apikey/-a CLI parameter to decorated functions.

from apikey_gateway import apikey_login

@apikey_login(service="media-match")
def media_app():
    print("API key validated for media-match service!")
    # Your media application logic here

@apikey_login(service="analytics")
def analytics_app():
    print("API key validated for analytics service!")
    # Your analytics application logic here

if __name__ == "__main__":
    media_app()  # or analytics_app()

Run with:

python app.py --apikey your-secret-key

FastAPI Middleware

The library provides built-in FastAPI middleware for validating API keys on all requests.

from fastapi import FastAPI
from apikey_gateway import add_apikey_gateway_middleware

# Create your FastAPI app
app = FastAPI(title="My API")

# Add API key validation middleware
add_apikey_gateway_middleware(
    app=app,
    service="my-service",
    verbose=True
)

# All endpoints below will require API key validation
@app.get("/protected/resource")
def protected_resource():
    return {"message": "Access granted to protected resource"}

# To run: uvicorn app:app --reload

Test the FastAPI endpoint:

# With X-AKGATEWAY-API-KEY header (default)
curl -H "X-AKGATEWAY-API-KEY: your-secret-key" http://localhost:8000/protected/resource

# With Authorization Bearer header
curl -H "Authorization: Bearer your-secret-key" http://localhost:8000/protected/resource

Middleware Features:

  • Automatically checks X-AKGATEWAY-API-KEY and Authorization Bearer headers
  • Supports custom API key headers
  • Can be configured with a custom public keys URL
  • Supports X-JSONBIN-API-KEY header for JSONBin API key authentication
  • Allows customization of both API key header and JSONBin API key header names

How It Works

For CLI Applications

  1. The application specifies the service name when using the @apikey_login decorator
  2. The user provides a secret API key via the --apikey/-a CLI parameter
  3. Followed by the same validation steps as FastAPI applications...

For FastAPI Applications

  1. The application adds the middleware with a specific service name
  2. The client provides a secret API key via X-AKGATEWAY-API-KEY or Authorization Bearer header
  3. Followed by the same validation steps as CLI applications...

Common Validation Steps

  1. The library computes an argon2id hash (public key) from the secret key
  2. It fetches the list of valid public keys from https://api.jsonbin.io/v3/b/691ec6a543b1c97be9b8ea6d
  3. Valid keys are filtered to only those belonging to the specified service
  4. If the computed public key matches any valid service-specific public key, access is granted

JSON Format

The remote JSON follows a service-aware structure where keys are organized by service name:

Service-Aware Structure

{
  "service1": {
    "key_id_1": "argon2id_hash_here",
    "key_id_2": "another_hash_here"
  },
  "service2": "single_key_hash_here"
}
  • Top-level keys are service names
  • Each service can have either multiple keys (as a dictionary) or a single key (as a string)
  • The library automatically handles both formats when fetching keys

License

MIT

Metadata

Release files for apikey-gateway 1.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for apikey-gateway 1.1.3
File Size Uploaded
apikey_gateway-1.1.3.tar.gz 13.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for apikey-gateway 1.1.3
File Interpreter ABI Platform
apikey_gateway-1.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 24.5 kB

Release files / apikey_gateway-1.1.3.tar.gz

Download URL apikey_gateway-1.1.3.tar.gz
Size 13.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e3c9f5ef11d9c867d1279a1906a2eeff0a29af68b045d990cfa370c6fecd6a15
BLAKE2b-256 checksum
How to use checksums
5fbf917797e4853e8c7a3d0754024d7e17c57737024ff18dc3a2cfadf3c0711b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.13

Release files / apikey_gateway-1.1.3-py3-none-any.whl

Download URL apikey_gateway-1.1.3-py3-none-any.whl
Size 11.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
42c17d6287fb680b74e6b0ea5bf805a9cfc467d2929f4f16d2d9b4d623673261
BLAKE2b-256 checksum
How to use checksums
c61aa9032b845827e940c2f8e7f964d24e1c9a3546693dadfe5b5f744131d00d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.13

Release history Release notifications | RSS feed

This release

1.1.3 This release

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page