Skip to content

AuthManager

AuthManager is the synchronous core of authority-auth. It implements all authentication flows: registration, login, tokens, sessions, MFA, WebAuthn, RBAC, API keys, and audit logging.

from authority import AuthConfig
from authority.core import AuthManager
from authority.storage.sqlite import SQLiteStorage

config = AuthConfig(jwt_secret_key="your-secret-key-min-32-chars")
storage = SQLiteStorage("authority_data.db")
auth = AuthManager(config, storage)

# SQLite connects lazily — just start using the manager.
try:
    user = auth.register("Alice", "alice@example.com", "SecureP@ss1234!")
finally:
    auth.close()

The manager can also be used as a context manager, which closes the storage connection when the block exits:

with AuthManager(config, SQLiteStorage("authority_data.db")) as auth:
    user = auth.register("Alice", "alice@example.com", "SecureP@ss1234!")

AsyncAuthManager mirrors every method as a coroutine — see AsyncAuthManager and Async usage.

User management

Method Signature
register register(name, email, password, ip_address=None, auto_verify=False) -> dict
get_user get_user(user_id) -> dict
get_profile get_profile(user_id) -> dict
update_user update_user(user_id, updates, ip_address=None) -> dict
update_profile update_profile(user_id, profile_data) -> dict
delete_user delete_user(user_id, ip_address=None) -> bool
request_email_verification request_email_verification(user_id, ip_address=None) -> str
verify_email verify_email(token, ip_address=None) -> dict
request_email_change request_email_change(user_id, new_email, current_password, ip_address=None) -> str
confirm_email_change confirm_email_change(token, ip_address=None) -> dict
request_password_reset request_password_reset(email, ip_address=None) -> str
reset_password reset_password(token, new_password, ip_address=None) -> dict
change_password change_password(user_id, current_password, new_password, ip_address=None) -> dict

register() returns a dict containing at least id and email. When email_verification_required is enabled, the user starts unverified and you must call verify_email() with the token from request_email_verification() — or pass auto_verify=True to register.

request_password_reset() returns the reset token, or an empty string for an unknown email (anti-enumeration). change_password() requires the current password and enforces password history.

Authentication & tokens

Method Signature
login login(email, password, ip_address=None, user_agent=None) -> dict
logout logout(user_id, refresh_token=None, access_token_jti=None, ip_address=None)
logout_all logout_all(user_id, exclude_refresh_token=None, ip_address=None) -> int
verify_access_token verify_access_token(token) -> dict
refresh_access_token refresh_access_token(refresh_token, ip_address=None, user_agent=None) -> dict
require_permission require_permission(user_id, permission_code)

login() returns access_token, refresh_token, and token_type — or, when MFA is enabled for the account, mfa_required: True and user_id instead. refresh_access_token() rotates the refresh token by default and issues a new pair. See Tokens.

Sessions

Method Signature
list_sessions list_sessions(user_id) -> list[dict]
revoke_session_by_id revoke_session_by_id(user_id, session_token_id, ip_address=None) -> bool
revoke_all_sessions_for_user revoke_all_sessions_for_user(user_id, exclude_token_id=None, ip_address=None) -> int

Sessions are the non-revoked, non-expired refresh tokens for a user. See Sessions.

Multi-factor authentication

Method Signature
setup_mfa setup_mfa(user_id) -> dict
verify_and_enable_mfa verify_and_enable_mfa(user_id, code, ip_address=None) -> dict
get_mfa_status get_mfa_status(user_id) -> dict
disable_mfa disable_mfa(user_id, password, ip_address=None) -> dict
verify_mfa_login verify_mfa_login(user_id, code, ip_address=None) -> dict
verify_mfa_recovery_code verify_mfa_recovery_code(user_id, recovery_code) -> bool
regenerate_recovery_codes regenerate_recovery_codes(user_id, password, ip_address=None) -> dict

setup_mfa() returns secret and provisioning_uri. After verify_and_enable_mfa(), the returned dict contains the one-time plaintext recovery_codes. Disabling or regenerating codes requires the password. See MFA.

WebAuthn / passkeys

Method Signature
start_webauthn_registration start_webauthn_registration(user_id, ip_address=None) -> dict
complete_webauthn_registration complete_webauthn_registration(user_id, credential_data, ip_address=None) -> dict
start_webauthn_authentication start_webauthn_authentication(user_id=None, ip_address=None) -> dict
complete_webauthn_authentication complete_webauthn_authentication(credential_data, ip_address=None) -> dict
list_webauthn_credentials list_webauthn_credentials(user_id) -> list[dict]
delete_webauthn_credential delete_webauthn_credential(user_id, credential_id, ip_address=None) -> bool

See WebAuthn for the full ceremony flow.

RBAC

Method Signature
create_role create_role(name, description=None) -> dict
delete_role delete_role(role_id) -> bool
list_roles list_roles() -> list[dict]
create_permission create_permission(code, description=None) -> dict
delete_permission delete_permission(permission_id) -> bool
list_permissions list_permissions() -> list[dict]
assign_permission_to_role assign_permission_to_role(role_id, permission_id) -> bool
remove_permission_from_role remove_permission_from_role(role_id, permission_id) -> bool
get_role_permissions get_role_permissions(role_id) -> list[dict]
assign_role_to_user assign_role_to_user(user_id, role_id) -> bool
remove_role_from_user remove_role_from_user(user_id, role_id) -> bool
get_user_roles get_user_roles(user_id) -> list[dict]
has_permission has_permission(user_id, permission_code) -> bool
get_user_permissions get_user_permissions(user_id) -> list[str]
require_permission require_permission(user_id, permission_code)

Permissions are assigned to roles, roles are assigned to users, and a user's effective permissions are the union across all their roles. See RBAC.

API keys

Method Signature
create_api_key create_api_key(user_id, description=None, scopes=None, expires_in_days=None, ip_address=None) -> dict
verify_api_key verify_api_key(api_key) -> dict
list_api_keys list_api_keys(user_id) -> list[dict]
revoke_api_key revoke_api_key(user_id, key_prefix, ip_address=None) -> bool

create_api_key() returns key (plaintext, shown once) and prefix. Only the prefix is stored; verification hashes the presented key. See API keys.

Audit logging

Method Signature
get_audit_log get_audit_log(user_id=None, action=None, limit=100, offset=0) -> list[dict]

See Audit log.