Create a centralized Authentication and Authorization token server. Easily secure FastAPI endpoints based on Users, Groups, Roles or Permissions with very little database usage.
Project description
Create a centralized Authentication and Authorization token server. Easily secure FastAPI endpoints based on Users, Groups, Roles or Permissions with very little database usage.
Documentation
https://easyauth.readthedocs.io/en/latest/
Key Features
- Centralized Authentication - Create Users / Groups / Roles / Actions once, use everywhere.
- Admin GUI
- JWT Token Authentication with RSA private / public key verification
- Easily backup / restore configration
- Builtin client login & cookie system
Quick Start
$ virtualenv -p <python3.X> easy-auth-env
$ source easy-auth-env/bin/activate
(easy-auth) $ pip install easy-auth[server]
(easy-auth) $ pip install easy-auth[client] # without db
Basic Server
Configure require env variables via a .json
$ cat > server_env.json <<EOF
{
"DB_TYPE": "sqlite",
"DB_NAME": "auth",
"ISSUER": "EasyAuth",
"SUBJECT": "EasyAuthAuth",
"AUDIENCE": "EasyAuthApis",
"KEY_PATH": "/my_key-location",
"KEY_NAME": "test_key"
}
EOF
#test_server.py
from fastapi import FastAPI
from easyauth.server import EasyAuthServer
server = FastAPI()
@server.on_event('startup')
async def startup():
server.auth = await EasyAuthServer.create(
server,
'/auth/token',
auth_secret='abcd1234',
admin_title='EasyAuth - Company',
admin_prefix='/admin',
env_from_file='server_sqlite.json'
)
Start Sever
$ uvicorn --host 0.0.0.0 --port 8330 test_server:server
Basic Client
#test_client.py
from fastapi import FastAPI
from easyauth.client import EasyAuthClient
server = FastAPI()
@server.on_event('startup')
async def startup():
@server.on_event('startup')
async def startup():
server.auth = await EasyAuthClient.create(
server,
token_server='0.0.0.0',
token_server_port=8090,
auth_secret='abcd1234',
default_permissions={'groups': ['users']}
)
# grants access to users matching default_permissions
@server.auth.get('/default')
async def default():
return f"I am default"
# grants access to only specified users
@server.auth.get('/', users=['jane'])
async def root():
return f"I am root"
# grants access to members of 'users' or 'admins' group.
@server.auth.get('/groups', groups=['users', 'admins'])
async def groups():
return f"I am groups"
# grants access to all members of 'users' group
# or a groups with role of 'basic' or advanced
@server.auth.get('/roles', roles=['basic', 'advanced'], groups=['users'])
async def roles():
return f"Roles and Groups"
# grants access to all members of groups with a roles granting 'BASIC_CREATE'
@server.auth.get('/actions', actions=['BASIC_CREATE'])
async def action():
return f"I am actions"
Server
See 0.0.0.0:8330/docs
GUI
Client
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 Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
easy_auth-0.139-py3-none-any.whl
(32.6 kB
view hashes)
Close
Hashes for easy_auth-0.139-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76f9bbe925a765d45054b997d3cde73db7e22fc98e37182f481d20f76c3296b7 |
|
MD5 | c7d089603b7cc3b6170f4afbc6324872 |
|
BLAKE2b-256 | f125a720a26c4b954139eabf57d327f46ac501d86e49bb7b7ac8554939e297be |