A Python library for API key validation
Project description
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/-aCLI 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-KEYandAuthorization Bearerheaders - Supports custom API key headers
- Can be configured with a custom public keys URL
- Supports
X-JSONBIN-API-KEYheader for JSONBin API key authentication - Allows customization of both API key header and JSONBin API key header names
How It Works
For CLI Applications
- The application specifies the
servicename when using the@apikey_logindecorator - The user provides a secret API key via the
--apikey/-aCLI parameter - Followed by the same validation steps as FastAPI applications...
For FastAPI Applications
- The application adds the middleware with a specific
servicename - The client provides a secret API key via
X-AKGATEWAY-API-KEYorAuthorization Bearerheader - Followed by the same validation steps as CLI applications...
Common Validation Steps
- The library computes an argon2id hash (public key) from the secret key
- It fetches the list of valid public keys from
https://api.jsonbin.io/v3/b/691ec6a543b1c97be9b8ea6d - Valid keys are filtered to only those belonging to the specified service
- 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
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file apikey_gateway-1.1.3.tar.gz.
File metadata
- Download URL: apikey_gateway-1.1.3.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3c9f5ef11d9c867d1279a1906a2eeff0a29af68b045d990cfa370c6fecd6a15
|
|
| MD5 |
95ed50d374e2614556537536693e7e1c
|
|
| BLAKE2b-256 |
5fbf917797e4853e8c7a3d0754024d7e17c57737024ff18dc3a2cfadf3c0711b
|
File details
Details for the file apikey_gateway-1.1.3-py3-none-any.whl.
File metadata
- Download URL: apikey_gateway-1.1.3-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42c17d6287fb680b74e6b0ea5bf805a9cfc467d2929f4f16d2d9b4d623673261
|
|
| MD5 |
add0b3ad9acd13c23716c6f194d38b6d
|
|
| BLAKE2b-256 |
c61aa9032b845827e940c2f8e7f964d24e1c9a3546693dadfe5b5f744131d00d
|