Aegis Authentication SDK for Python.
Project description
Aegis Auth SDK
🚀 Core Value: Making Authentication Simple and Secure
Aegis Auth SDK is a modern authentication toolkit for Web applications, built on the WebAuthn (FIDO2) standard. It enables developers to quickly implement passwordless authentication, fundamentally eliminating the security risks and usability issues associated with traditional passwords.
🌟 Key Features
1. Excellent Developer Experience
- Out-of-the-box: Install via
pipwith zero complex setup - Highly abstracted: WebAuthn complexity is fully encapsulated
- Fast integration: Implement registration and login in minutes
2. Secure & Compliant Passwordless Solution
- Passwordless by design: Eliminates password reuse, phishing, and credential stuffing
- Minimal sensitive data: Only public keys stored server-side, no biometric raw data
- Anti-automation: Challenge-response mechanism prevents brute-force and bot attacks
3. Cross-platform & Biometric Support
- Multi-platform compatibility:
- Windows Hello
- macOS Touch ID
- iOS / Android (Face ID / Fingerprint)
- Device binding: Strong "User + Device" trust model
4. Enterprise-grade User Management
- Unified user view: Credential management, device binding, status control
- Audit logs: Full authentication traceability
📦 Requirements
- Python 2.7 or Python 3.6+
- Zero third-party dependencies (stdlib only)
🛠 Quick Start
Installation
pip install aegis-auth-sdk
SDK Example
from aegis_auth_sdk import AegisClient
client = AegisClient(
base_url="https://your-server:8000",
app_id="your_app_id",
secret_key="your_secret_key"
)
# Get app info
app_info = client.get_app_info()
print(app_info)
# List users
result = client.get_users()
for user in result["users"]:
print("%s - Status: %s" % (user["username"], "Enabled" if user["status"] else "Disabled"))
# Enable / disable user
client.set_user_status("alice", False)
# Enable / disable app registration
client.set_app_register(False)
# Enable / disable multi-device registration
client.set_app_multi_device(True)
# Delete user
client.delete_user("alice")
# Query logs
logs = client.get_logs(log_type="auth_verify", page_size=5)
for entry in logs["items"]:
print("[%s] %s from %s - %s" % (
entry["log_time"], entry["username"], entry["log_ip"], entry["log_info"]))
🌐 Integration Example
Frontend Example
export const fetchUserLoginOptions = (param) => {
return request({
url: '/api/user/login/options',
headers: { 'Content-Type': 'application/json', 'Login-Name': param.username },
method: 'post',
data: param
});
};
export const fetchUserLoginVerify = (username, asseResp) => {
return request({
url: '/api/user/login/verification',
method: 'post',
headers: { 'Content-Type': 'application/json', 'Login-Name': username },
data: asseResp
});
};
const resp = await fetchUserLoginOptions(param);
const asseResp = await startAuthentication(resp.data);
const verificationResp = await fetchUserLoginVerify(param.username, asseResp);
if (verificationResp.data.code === 200) {
localStorage.setItem('Authorization', verificationResp.data.token_type + ' ' + verificationResp.data.access_token);
router.push('/');
}
Backend Example
from aegis_auth_sdk import AegisClient
from fastapi import APIRouter, Request
from fastapi.responses import JSONResponse
import jwt, datetime
SECRET_KEY = "your-jwt-secret"
client = AegisClient(
base_url="https://your-server:8000",
app_id="your_app_id",
secret_key="your_secret_key"
)
user = APIRouter()
@user.post("/login/options")
async def user_login_options(req: dict, request: Request):
username = request.headers.get("Login-Name")
resp = client.get_login_options(username)
return JSONResponse(status_code=resp.status_code, content=resp.json())
@user.post("/login/verification")
async def user_login_verification(req: dict, request: Request):
username = request.headers.get("Login-Name")
resp = client.get_login_verify(username, req)
if resp.json().get("verified", False):
token = jwt.encode({
"user": username,
"exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
}, SECRET_KEY, algorithm="HS256")
return JSONResponse(content={"access_token": token, "token_type": "Bearer", "code": 200})
return JSONResponse(status_code=200, content={"code": 500, "msg": resp.text})
@user.post("/register/options")
async def user_register_options(req: dict, request: Request):
username = request.headers.get("Login-Name")
resp = client.get_register_options(username)
return JSONResponse(status_code=resp.status_code, content=resp.json())
@user.post("/register/verification")
async def user_register_verification(req: dict, request: Request):
username = request.headers.get("Login-Name")
resp = client.get_register_verify(username, req)
return JSONResponse(status_code=resp.status_code, content=resp.json())
⚠️ Error Codes
| HTTP Status | Meaning | Description |
|---|---|---|
| 200 | OK | Request successful |
| 400 | Bad Request | Missing or invalid parameters |
| 401 | Unauthorized | Invalid App ID / Secret or app disabled |
| 403 | Forbidden | Registration disabled or WebAuthn verification failed |
| 404 | Not Found | Resource not found |
| 500 | Server Error | Internal server error |
📦 Error Response Format
{ "error": "Error message" }
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aegis_auth_sdk-0.1.2.tar.gz.
File metadata
- Download URL: aegis_auth_sdk-0.1.2.tar.gz
- Upload date:
- Size: 9.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42e9e4a1a1bf8ff373e54d0eaa406c9bb734673a893558f7e626dff4d4bbe260
|
|
| MD5 |
59d731740cf22e8f303d97cb92f726a7
|
|
| BLAKE2b-256 |
9d7246255bfb46cd5c5e0cdede35bfb7823fe6757928be0f9ee5b507ac29603f
|
Provenance
The following attestation bundles were made for aegis_auth_sdk-0.1.2.tar.gz:
Publisher:
pypi-publish.yml on sevck/aegis-auth-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aegis_auth_sdk-0.1.2.tar.gz -
Subject digest:
42e9e4a1a1bf8ff373e54d0eaa406c9bb734673a893558f7e626dff4d4bbe260 - Sigstore transparency entry: 1447770300
- Sigstore integration time:
-
Permalink:
sevck/aegis-auth-sdk@e3e48aab7a2bc82ebedd50f52c03c89937455b61 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/sevck
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@e3e48aab7a2bc82ebedd50f52c03c89937455b61 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aegis_auth_sdk-0.1.2-py3-none-any.whl.
File metadata
- Download URL: aegis_auth_sdk-0.1.2-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8ff6211ede9b112b2d1dcf153330bd5e9185afb8e403b79236778e0bf9edfbe
|
|
| MD5 |
07aa3d4edad6a77810060eb462493d6d
|
|
| BLAKE2b-256 |
c3de6166d59f5a1ffd8c0d9bf2c1db4736999838162a5a4004c75acd68a130a0
|
Provenance
The following attestation bundles were made for aegis_auth_sdk-0.1.2-py3-none-any.whl:
Publisher:
pypi-publish.yml on sevck/aegis-auth-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aegis_auth_sdk-0.1.2-py3-none-any.whl -
Subject digest:
f8ff6211ede9b112b2d1dcf153330bd5e9185afb8e403b79236778e0bf9edfbe - Sigstore transparency entry: 1447770477
- Sigstore integration time:
-
Permalink:
sevck/aegis-auth-sdk@e3e48aab7a2bc82ebedd50f52c03c89937455b61 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/sevck
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@e3e48aab7a2bc82ebedd50f52c03c89937455b61 -
Trigger Event:
push
-
Statement type: