Kaleidoo middleware package
Project description
kal-middleware
kal-middleware
is a Python package designed for FastAPI applications to provide robust JWT and Service-to-Service (STS) authentication using Firebase and Google Identity Platform.
Features
- JWT Authentication: Ensures that the JWTs are valid and checks user roles against provided configurations.
- STS Authentication: Validates tokens for service-to-service communication ensuring that only verified services can communicate.
Installation
Install kal-middleware
using pip:
pip install kal_middleware
Usage
JWT Authentication
To add JWT authentication to your FastAPI endpoints, you can use the jwt_authenticated
decorator provided by kal-middleware
. This decorator checks if the JWT token in the Authorization
header is valid and whether the user has the appropriate role based on a configuration map.
Here's an example of how to apply the jwt_authenticated
decorator:
from kal_middleware.jwt import firebase_jwt_authenticated
# Define a function to retrieve the user's role based on their user ID
def get_user_capabilities(user_id: str):
# Implement your logic to retrieve the user's capabilities
# If the user not found, return "".
# Example - the user can access the get action in example service only.
example_capabilities = {
"service": "example_service",
"action": "get"
}
return example_capabilities
# Define a configuration map specifying services, actions, and required permissions
config_map = {
"example_service": {
"url": "service_url",
"actions": {
"get",
"get_all"
}
}
}
# if there is specific variable in the body that needed checks of who access its data only
def check_access(firebase_uid, body):
# check in the db the user and his parameters
# for example if in the db the user with that exactly firebase_uid is:
user = {
"firebase_uid": "12345",
"org_id": "12345"
}
return body["org_id"] == user["org_id"]
@app.get("/your-route/<service>/<action>")
@firebase_jwt_authenticated(get_user_capabilities, config_map, check_access)
async def your_route_function(
request: Request = None,
service: Union[str, None] = None,
action: Union[str, None] = None
):
# Your route logic
return {"message": "This is a protected route"}
# Or - if there is no need to check for specific data in the body
@app.get("/your-route-without-check-access/<service>/<action>")
@firebase_jwt_authenticated(get_user_capabilities, config_map)
async def your_route_function_without_check_access(
request: Request = None,
service: Union[str, None] = None,
action: Union[str, None] = None
):
# Your route logic
return {"message": "This is a protected route"}
STS Authentication
For service-to-service (STS) authentication using Google's Identity Platform, you can use the sts_authenticated
decorator. This ensures that the calling service's token is verified to enable secure interactions between services.
Here's how to use the sts_authenticated
decorator in your FastAPI app:
- Make sure first you have env variable named
ALLOWED_SERVICE_ACCOUNTS
with the following structure:example1@gserviceaccount.com, example2@gserviceaccount.com
from kal_middleware.sts import sts_authenticated
@app.get("/secure-service")
@sts_authenticated
async def secure_service_function():
# Logic that requires service-to-service authentication
return {"message": "Service-to-service call is authenticated"}
This configuration will parse and verify the Authorization header, ensuring that only requests with a verified bearer token can access the endpoint.
Project details
Release history Release notifications | RSS feed
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
File details
Details for the file kal_middleware-0.0.4.tar.gz
.
File metadata
- Download URL: kal_middleware-0.0.4.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | be76657b62f31e002829b7bd565871f23d0d2c388c5f67dfa347c7185f41cd68 |
|
MD5 | d1733b983db6a56ac27411458ff23757 |
|
BLAKE2b-256 | a412bf4221f289eddd517b5511fac6a5386413f0e306328c167d80b4a98c6fe5 |
File details
Details for the file kal_middleware-0.0.4-py2.py3-none-any.whl
.
File metadata
- Download URL: kal_middleware-0.0.4-py2.py3-none-any.whl
- Upload date:
- Size: 6.4 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 718c6570e2fc8a1acc63e89eb716270dd2028cb0fb6ffc49e6084bf453dbb35c |
|
MD5 | 075939e03460cb81498da8da9022dff8 |
|
BLAKE2b-256 | fc241897b95a13580a3f512408307bca56d916f9375a69dc96d89a479d39156d |