Complete API documentation for Secure Token library.
The main class for token management operations.
SecureTokenManager(settings_instance: Optional[Settings] = None)Parameters:
settings_instance(Optional[Settings]): Custom settings instance. If None, uses default settings.
Example:
from secure_token import SecureTokenManager, Settings
# Default settings
manager = SecureTokenManager()
# Custom settings
settings = Settings(SECRET_KEY="my-secret", DEFAULT_EXPIRATION_HOURS=12)
manager = SecureTokenManager(settings_instance=settings)Generate a new secure encrypted token.
generate_token(
user_id: str,
permissions: Optional[List[str]] = None,
expires_in_hours: Optional[int] = None,
additional_data: Optional[Dict[str, Any]] = None
) -> strParameters:
user_id(str): Unique user identifier (required)permissions(Optional[List[str]]): List of user permissionsexpires_in_hours(Optional[int]): Token expiration time in hoursadditional_data(Optional[Dict[str, Any]]): Additional data to store in token
Returns:
str: Base64-encoded encrypted token
Raises:
TokenError: Error during token generationValueError: Invalid input parameters
Example:
# Basic token
token = manager.generate_token("user123")
# Advanced token
token = manager.generate_token(
user_id="admin_user",
permissions=["read", "write", "admin"],
expires_in_hours=24,
additional_data={"role": "administrator", "department": "IT"}
)Validate and decrypt a token.
validate_token(token: str) -> Dict[str, Any]Parameters:
token(str): Token to validate
Returns:
Dict[str, Any]: Validation result containing:valid(bool): Whether token is validuser_id(str): User ID from tokenpermissions(List[str]): User permissionsexpires_at(datetime): Token expiration timeissued_at(datetime): Token issue timeadditional_data(Dict): Additional data from tokentime_remaining(str): Time until expiration
Raises:
InvalidTokenError: Token format is invalidTokenExpiredError: Token has expiredTokenError: Other token-related errors
Example:
try:
result = manager.validate_token(token)
user_id = result['user_id']
permissions = result['permissions']
except TokenExpiredError:
pass
except InvalidTokenError:
passCreate a new token with extended expiration time.
refresh_token(
token: str,
new_expires_in_hours: Optional[int] = None
) -> strParameters:
token(str): Current valid tokennew_expires_in_hours(Optional[int]): New expiration time in hours
Returns:
str: New refreshed token
Raises:
InvalidTokenError: Token format is invalidTokenExpiredError: Token has expiredTokenError: Error during refresh
Example:
# Refresh with default expiration
new_token = manager.refresh_token(old_token)
# Refresh with custom expiration
new_token = manager.refresh_token(old_token, new_expires_in_hours=48)Get comprehensive information about a token.
get_token_info(token: str) -> Dict[str, Any]Parameters:
token(str): Token to analyze
Returns:
Dict[str, Any]: Token information containing:valid(bool): Token validitytoken_id(str): Unique token identifieruser_id(str): User IDpermissions(List[str]): User permissionsissued_at(str): Issue timestampexpires_at(str): Expiration timestampadditional_data(Dict): Additional datatime_remaining(str): Time until expirationis_revoked(bool): Revocation status (always False in stateless mode)
Raises:
InvalidTokenError: Token format is invalidTokenExpiredError: Token has expiredTokenError: Error getting token info
Example:
info = manager.get_token_info(token)
token_id = info['token_id']
user_id = info['user_id']
time_remaining = info['time_remaining']
# Use token information as neededCheck if token has a specific permission.
check_permission(token: str, required_permission: str) -> boolParameters:
token(str): Token to checkrequired_permission(str): Permission to verify
Returns:
bool: True if permission exists
Raises:
InvalidTokenError: Token is invalidTokenExpiredError: Token has expiredPermissionDeniedError: Permission not grantedTokenError: Other token errors
Example:
try:
manager.check_permission(token, "admin")
# Grant admin access
except PermissionDeniedError:
# Handle access denied
passExport current configuration for backup purposes.
export_config() -> Dict[str, str]Returns:
Dict[str, str]: Configuration data containing:secret_key_hash(str): Hashed secret key (first 16 bytes)salt(str): Base64-encoded saltversion(str): Library versionalgorithm(str): Encryption algorithm used
Example:
config = manager.export_config()
algorithm = config['algorithm']
version = config['version']
# Use configuration data as neededConfiguration class for SecureTokenManager.
Settings(
SECRET_KEY: Optional[str] = None,
DEFAULT_EXPIRATION_HOURS: int = 24,
SALT: Optional[bytes] = None
)Parameters:
SECRET_KEY(Optional[str]): Secret key for encryption (auto-generated if None)DEFAULT_EXPIRATION_HOURS(int): Default token expiration timeSALT(Optional[bytes]): Salt for key derivation (auto-generated if None)
Example:
from secure_token import Settings
settings = Settings(
SECRET_KEY="my-super-secret-key",
DEFAULT_EXPIRATION_HOURS=12,
SALT=b"my-custom-salt-32-bytes-long!!"
)Validation:
Settings automatically validates all parameters during initialization. If you provide invalid values, it will raise a TokenError.
Example with validation:
from secure_token import Settings, TokenError
try:
settings = Settings(SECRET_KEY="weak") # Too weak!
except TokenError as e:
print(f"Validation error: {e}")
# Valid settings
settings = Settings(SECRET_KEY="MyStrongPassword@123")Custom exception classes for error handling.
Base exception for all token-related errors.
class TokenError(Exception):
"""Base exception for token operations"""Raised when a token has expired.
class TokenExpiredError(TokenError):
"""Token has expired"""Raised when token format is invalid.
class InvalidTokenError(TokenError):
"""Token format is invalid"""Raised when required permission is not granted.
class PermissionDeniedError(TokenError):
"""Permission denied"""Example Usage:
from secure_token import (
TokenError, TokenExpiredError,
InvalidTokenError, PermissionDeniedError
)
try:
result = manager.validate_token(token)
# Process successful validation
except TokenExpiredError:
# Handle expired token - redirect to login
pass
except InvalidTokenError:
# Handle invalid token - authentication failed
pass
except PermissionDeniedError:
# Handle permission issues - access denied
pass
except TokenError as e:
# Handle other token errors
passHelper functions for token operations.
Generate a cryptographically secure secret key.
generate_secret_key(length: int = 32) -> strParameters:
length(int): Key length in bytes (default: 32)
Returns:
str: URL-safe base64-encoded secret key
Example:
from secure_token import generate_secret_key
secret = generate_secret_key(32)
# Use the generated secret key securelyGenerate a cryptographically secure salt.
generate_salt(length: int = 32) -> bytesParameters:
length(int): Salt length in bytes (default: 32)
Returns:
bytes: Random salt bytes
Example:
from secure_token import generate_salt
salt = generate_salt(32)
# Use the generated salt for key derivationInput validation functions.
Validate user ID format.
validate_user_id(user_id: str) -> NoneParameters:
user_id(str): User ID to validate
Raises:
ValueError: If user ID is invalid
Example:
from secure_token import validate_user_id
try:
validate_user_id("user123")
# User ID is valid
except ValueError as e:
# Handle invalid user ID
passValidate permissions list format.
validate_permissions(permissions: List[str]) -> NoneParameters:
permissions(List[str]): Permissions to validate
Raises:
ValueError: If permissions are invalid
Example:
from secure_token import validate_permissions
try:
validate_permissions(["read", "write", "admin"])
# Permissions are valid
except ValueError as e:
# Handle invalid permissions
passValidate expiration hours value.
validate_expires_hours(hours: int) -> NoneParameters:
hours(int): Hours to validate
Raises:
ValueError: If hours value is invalid
Example:
from secure_token import validate_expires_hours
try:
validate_expires_hours(24)
# Expiration time is valid
except ValueError as e:
# Handle invalid expiration time
pass- Token Generation: ~15,000 tokens/second
- Token Validation: ~21,000 validations/second
- Memory Usage: Minimal (stateless design)
- Thread Safety: Full thread-safe operations
- Encryption: Fernet with PBKDF2 (100,000 iterations)
- Secret Key: Must be kept secure and never exposed
- Salt: Should be unique per application instance
- Token Storage: Tokens should be transmitted over HTTPS only
- Expiration: Set appropriate expiration times based on security needs
- Permissions: Use principle of least privilege
Next: Tutorial Guide | Back to: Main README