easyauth
2.0.3
Créez un serveur de jeton d'authentification et d'autorisation centralisé. Sécurisez facilement les points de terminaison FastAPI en fonction des utilisateurs, des groupes, des rôles ou des autorisations pour minimiser les exigences d'accès à la base de données de l'authentification.
https://easyauth.readthedocs.io/en/latest/
$ 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
Configurer nécessiter des variables Env via un .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 . auth = EasyAuthServer . create (
server ,
'/auth/token' ,
auth_secret = 'abcd1234' ,
admin_title = 'EasyAuth - Company' ,
admin_prefix = '/admin' ,
env_from_file = 'server_env.json'
)
Commencer à se séparer
uvicorn --host 0.0.0.0 --port 8330 test_server:server
#test_client.py
from fastapi import FastAPI
from easyauth . client import EasyAuthClient
from easyauth import get_user
server = FastAPI ()
server . auth = 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 ( user : str = get_user ()):
return f" { user } is in 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"