Skip to main content

Sanctum

Developer-friendly AWS Cognito client for Python, with clean APIs for managing user pools and authentication flows.

Tests Coverage Python License

Installation

pip install sanctum

Quick Start

from sanctum import SanctumClient

# Initialize the client
client = SanctumClient(
    user_pool_id="us-east-1_123456789",
    client_id="your-app-client-id",
    region="us-east-1"
)

# User authentication
try:
    auth_result = client.authenticate_user(
        username="user@example.com",
        password="SecurePassword123!"
    )
    print(f"Login successful! Access token: {auth_result['AccessToken']}")
except AuthenticationError as e:
    print(f"Authentication failed: {e}")

# User management
user_info = client.create_user(
    username="newuser@example.com",
    password="TempPassword123!",
    email="newuser@example.com",
    temporary_password=True
)

# RBAC (Role-Based Access Control)
# Create groups and manage permissions
admin_group = client.create_group(
    group_name="admin",
    description="System administrators",
    precedence=1
)

# Add user to group
client.add_user_to_group(
    username="user@example.com",
    group_name="admin"
)

# Check user permissions
has_admin_access = client.user_has_group(
    username="user@example.com",
    group_name="admin"
)

Features

🔐 Authentication & Authorization

  • Multiple Auth Flows: USER_PASSWORD_AUTH, ADMIN_NO_SRP_AUTH, CUSTOM_AUTH
  • MFA Support: SMS, TOTP, and custom challenge responses
  • Token Management: Automatic refresh token handling
  • Role-Based Access Control (RBAC): AWS Cognito User Pool Groups integration

👥 User Management

  • User Lifecycle: Create, update, delete users
  • Profile Management: Update user attributes and preferences
  • Admin Operations: Admin-initiated password changes and user management
  • User Status: Enable, disable, confirm users

🛡️ Security Features

  • JWT Token Processing: Parse and validate access tokens
  • Group-Based Permissions: Check user group memberships from tokens
  • Secure Hash Calculation: HMAC-SHA256 for client secret validation
  • Comprehensive Error Handling: Detailed error reporting and handling

🏗️ Developer Experience

  • Clean, Intuitive API: Pythonic interface for AWS Cognito operations
  • Comprehensive Testing: 151 tests with 89% code coverage
  • Type Hints: Full type annotation support
  • Modular Architecture: Use individual components or the unified client

API Overview

Main Client

from sanctum import SanctumClient

client = SanctumClient(
    user_pool_id="us-east-1_123456789",
    client_id="your-app-client-id",
    region="us-east-1",
    client_secret="your-client-secret"  # Optional
)

Authentication Methods

# User password authentication
auth_result = client.authenticate_user("user@example.com", "password")

# Admin authentication (no SRP)
auth_result = client.admin_authenticate("user@example.com", "password")

# Custom authentication flow
auth_result = client.initiate_custom_auth("user@example.com", auth_parameters={})

User Management

# Create user
user = client.create_user(
    username="user@example.com",
    password="TempPass123!",
    email="user@example.com",
    temporary_password=True
)

# Update user attributes
client.update_user_attributes("user@example.com", {"name": "John Doe"})

# Delete user
client.delete_user("user@example.com")

RBAC Operations

# Group management
client.create_group("admin", "Administrators", precedence=1)
client.add_user_to_group("user@example.com", "admin")

# Permission checking
is_admin = client.user_has_group("user@example.com", "admin")

# JWT token group extraction
groups = client.rbac.get_groups_from_token(access_token)

Token Management

# Refresh tokens
new_tokens = client.refresh_token(refresh_token)

# Respond to auth challenges
challenge_response = client.respond_to_auth_challenge(
    challenge_name="SMS_MFA",
    session="challenge-session",
    challenge_responses={"SMS_MFA_CODE": "123456"}
)

Advanced Usage

Using Individual Components

If you prefer to use specific components directly:

from sanctum import RBACManager, TokenManager, UserManager

# Direct component usage
rbac = RBACManager(user_pool_id, client_id, region)
tokens = TokenManager(user_pool_id, client_id, region)
users = UserManager(user_pool_id, client_id, region)

Error Handling

from sanctum.exceptions import AuthenticationError, ValidationError, SanctumError

try:
    result = client.authenticate_user("user@example.com", "wrong-password")
except AuthenticationError as e:
    print(f"Authentication failed: {e}")
except ValidationError as e:
    print(f"Validation error: {e}")
except SanctumError as e:
    print(f"General Sanctum error: {e}")

Documentation

Examples

Check out the examples directory for comprehensive usage examples:

Development

Requirements

  • Python 3.8+
  • AWS account with Cognito User Pool configured
  • boto3 and other dependencies (see requirements.txt)

Testing

The project includes comprehensive tests with 89% coverage:

# Run all tests
python -m pytest tests/ --cov=sanctum --cov-report=term-missing

# Run specific test modules
python -m pytest tests/test_rbac.py -v
python -m pytest tests/test_client.py -v

# Run tests with coverage report
python -m pytest tests/ --cov=sanctum --cov-report=html

Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass (python -m pytest)
  6. Submit a pull request

License

MIT License - see LICENSE file for details.

Changelog

See CHANGELOG.md for a detailed history of changes.

Metadata

Release files for sanctum 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sanctum 0.1.1
File Size Uploaded
sanctum-0.1.1.tar.gz 15.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sanctum 0.1.1
File Interpreter ABI Platform
sanctum-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 32.0 kB

Release files / sanctum-0.1.1.tar.gz

Download URL sanctum-0.1.1.tar.gz
Size 15.2 kB
Tags Source
SHA-256 checksum
How to use checksums
0b712b3757bc2c33b7db55b62c0ba1a90a6819e71d0fbd260830d38b61aeadf7
BLAKE2b-256 checksum
How to use checksums
c180295ca1a04e9dd685ba9f3c05ec0d5ccca5dea14c328de0250495ec8236dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.5 CPython/3.13.3 Darwin/24.3.0

Release files / sanctum-0.1.1-py3-none-any.whl

Download URL sanctum-0.1.1-py3-none-any.whl
Size 16.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6e4a76295c411c7b16d92ad2aea2ea4d5bf73aa69d3323453d8e29e37e532020
BLAKE2b-256 checksum
How to use checksums
b82cb1b5beaa7545da479ae7191a779d53e5e75cb4e883142f96c0e6d20e834a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.5 CPython/3.13.3 Darwin/24.3.0

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page