easyauth
2.0.3
創建集中式身份驗證和授權令牌。根據用戶,組,角色或權限輕鬆保護FastApi端點,以最大程度地減少AUTH的數據庫訪問要求。
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
配置要求通過.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'
)
開始切割
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"