Ready to use and customizable Authentications and Oauth2 management for FastAPI
Project description
Authx
Ready-to-use and customizable Authentications and Oauth2 management for FastAPI ⚡
Project | Status |
---|---|
CI | |
Meta |
Source Code: https://github.com/yezz123/authx
Documentation: https://authx.yezz.me/
Add a Fully registration and authentication or authorization system to your FastAPI project. AuthX is designed to be as customizable and adaptable as possible.
Features
- Support Python 3.8+ & Pydantic 1.7+.
- Multiple customizable authentication backend:
- JWT authentication backend included
- JWT encoding/decoding for application authentication
- Automatic detection of JWTs in requests:
- JWTs in headers
- JWTs in cookies
- JWTs in query parameters
- JWTs in request bodies
- Cookie authentication backend included
- JWT authentication backend included
- Middleware for authentication and authorization through JWT.
- Extensible Error Handling System.
Extra Features
AuthX is designed to be as customizable and adaptable as possible.
So you need to install authx-extra
to get extra features.
- Using Redis as a session store & cache.
- Support HTTPCache.
- Support Sessions and Pre-built CRUD functions and Instance to launch Redis.
- Support Middleware of pyinstrument to check your service performance.
- Support Middleware for collecting and exposing Prometheus metrics.
Note: Check Release Notes.
Project using
Here is a simple way to kickstart your project with AuthX:
from fastapi import FastAPI, Depends, HTTPException
from authx import AuthX, AuthXConfig, RequestToken
app = FastAPI()
config = AuthXConfig(
JWT_ALGORITHM = "HS256",
JWT_SECRET_KEY = "SECRET_KEY",
JWT_TOKEN_LOCATION = ["headers"],
)
auth = AuthX(config=config)
auth.handle_errors(app)
@app.get('/login')
def login(username: str, password: str):
if username == "xyz" and password == "xyz":
token = auth.create_access_token(uid=username)
return {"access_token": token}
raise HTTPException(401, detail={"message": "Invalid credentials"})
@app.get("/protected", dependencies=[Depends(auth.get_token_from_request)])
def get_protected(token: RequestToken = Depends()):
try:
auth.verify_token(token=token)
return {"message": "Hello world !"}
except Exception as e:
raise HTTPException(401, detail={"message": str(e)}) from e
Contributors and sponsors
Thanks goes to these wonderful people (emoji key):
Yasser Tahiri 💻 📖 🚧 🚇 |
Abderrahim SOUBAI-ELIDRISI 👀 📖 |
Ismail Ghallou 💻 🛡️ |
MojixCoder 💻 🐛 |
Stéphane Raimbault 💻 🔌 |
theoohoho 📖 |
Yogesh Upadhyay 🐛 |
Roman 🐛 |
Alvaro Lopez Ortega 📖 |
Devy Santo 🚇 |
pg365 🚇 |
Jorrit 📦 |
This project follows the all-contributors specification. Contributions of any kind welcome!
License
This project is licensed under the terms of the MIT License.
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 authx-1.4.0.tar.gz
.
File metadata
- Download URL: authx-1.4.0.tar.gz
- Upload date:
- Size: 56.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bcd7ec8b604003ff11353785905f59fafe95dafbdb568e3740ed8b7cfa4ca444 |
|
MD5 | 09f1b127f46ed47b0d2cbcbb67342ff3 |
|
BLAKE2b-256 | 2d977a2de5506c6db33e59a0289373c8cff0ec8c20926d811598e3f7994fa32b |
File details
Details for the file authx-1.4.0-py3-none-any.whl
.
File metadata
- Download URL: authx-1.4.0-py3-none-any.whl
- Upload date:
- Size: 26.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a95790e755b8bb037aa79756e178a1b8fd41a563d0b74b87ff023e5bd0fda91 |
|
MD5 | b6246fb79a517aa95790b05504f98657 |
|
BLAKE2b-256 | 214a166fdc362468948fb33714a6ab80a90c6bd6dad53495e6cfdb977355d966 |