Authentication¶
Authentication primitives for JWT tokens and encryption.
Overview¶
The auth module provides core authentication functionality that can be used by any service in the Imbi ecosystem:
- JWT Tokens: Access and refresh token creation/verification
- Token Encryption: Fernet encryption for sensitive data at rest
JWT Tokens¶
from imbi_common.auth import core
# Create an access token
access_token = core.create_access_token(
subject="user@example.com",
extra_claims={"role": "admin"}
)
# Create a refresh token
refresh_token = core.create_refresh_token(
subject="user@example.com"
)
# Verify and decode a token
try:
payload = core.verify_token(access_token)
user_id = payload["sub"]
role = payload.get("role")
except Exception as e:
print(f"Invalid token: {e}")
Token Encryption¶
from imbi_common.auth import encryption
# Encrypt sensitive data (e.g., OAuth tokens)
encrypted = encryption.encrypt_token("sensitive_oauth_token")
# Decrypt
decrypted = encryption.decrypt_token(encrypted)
API Reference¶
Core Functions¶
create_access_token ¶
create_access_token(
subject: str,
extra_claims: dict[str, Any] | None = None,
auth_settings: Auth | None = None,
) -> str
Create JWT access token.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
subject
|
str
|
Subject (user identifier) to encode in token |
required |
extra_claims
|
dict[str, Any] | None
|
Optional additional claims to include |
None
|
auth_settings
|
Auth | None
|
Optional auth settings for JWT configuration (uses singleton if not provided) |
None
|
Returns:
| Type | Description |
|---|---|
str
|
JWT token string |
Source code in src/imbi_common/auth/core.py
create_refresh_token ¶
create_refresh_token(
subject: str,
extra_claims: dict[str, Any] | None = None,
auth_settings: Auth | None = None,
) -> str
Create JWT refresh token.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
subject
|
str
|
Subject (user identifier) to encode in token |
required |
extra_claims
|
dict[str, Any] | None
|
Optional additional claims to include |
None
|
auth_settings
|
Auth | None
|
Optional auth settings for JWT configuration (uses singleton if not provided) |
None
|
Returns:
| Type | Description |
|---|---|
str
|
JWT token string |
Source code in src/imbi_common/auth/core.py
verify_token ¶
Decode and validate JWT token.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
token
|
str
|
JWT token string to decode |
required |
auth_settings
|
Auth | None
|
Optional auth settings for JWT configuration (uses singleton if not provided) |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Decoded token claims |
Raises:
| Type | Description |
|---|---|
ExpiredSignatureError
|
If token has expired |
InvalidTokenError
|
If token is invalid |
Source code in src/imbi_common/auth/core.py
Encryption Functions¶
TokenEncryption ¶
Handles encryption/decryption of sensitive tokens using Fernet.
This class follows the singleton pattern to ensure a single encryption instance is used throughout the application lifecycle.
Example
encryptor = TokenEncryption.get_instance() encrypted = encryptor.encrypt('my-secret-token') decrypted = encryptor.decrypt(encrypted) assert decrypted == 'my-secret-token'
Initialize with base64-encoded Fernet key.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
encryption_key
|
str
|
Base64-encoded Fernet encryption key |
required |
Raises:
| Type | Description |
|---|---|
ValueError
|
If encryption key format is invalid |
Source code in src/imbi_common/auth/encryption.py
decrypt ¶
Decrypt a token string.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ciphertext
|
str | None
|
Base64-encoded encrypted token, or None |
required |
Returns:
| Type | Description |
|---|---|
str | None
|
Decrypted plaintext token, or None if input is None or decryption fails |
Note
Returns None instead of raising exception on decryption failure to handle corrupted/invalid ciphertext gracefully. Handles both new format (Fernet base64) and legacy format (double base64 encoding) for backward compatibility.
Source code in src/imbi_common/auth/encryption.py
encrypt ¶
Encrypt a token string.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
plaintext
|
str | None
|
Token string to encrypt, or None |
required |
Returns:
| Type | Description |
|---|---|
str | None
|
Base64-encoded encrypted token, or None if input is None |
Raises:
| Type | Description |
|---|---|
Exception
|
If encryption fails |
Source code in src/imbi_common/auth/encryption.py
get_instance
classmethod
¶
Get singleton instance of TokenEncryption.
Returns:
| Name | Type | Description |
|---|---|---|
TokenEncryption |
TokenEncryption
|
The singleton instance |
Raises:
| Type | Description |
|---|---|
RuntimeError
|
If encryption key not configured in settings |
Source code in src/imbi_common/auth/encryption.py
reset_instance
classmethod
¶
Reset singleton instance (for testing).
This method is primarily used in test suites to reset the singleton state between tests.
get_fernet ¶
Get Fernet instance for encryption/decryption.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
auth_settings
|
Auth | None
|
Optional auth settings (uses singleton if not provided) |
None
|
Returns:
| Type | Description |
|---|---|
Fernet
|
Fernet instance configured with encryption key |
Source code in src/imbi_common/auth/encryption.py
encrypt_token ¶
Encrypt a token string.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
plaintext
|
str
|
Token string to encrypt |
required |
auth_settings
|
Auth | None
|
Optional auth settings (creates default if not provided) |
None
|
Returns:
| Type | Description |
|---|---|
str
|
Base64-encoded encrypted token |
Source code in src/imbi_common/auth/encryption.py
decrypt_token ¶
Decrypt a token string.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ciphertext
|
str
|
Base64-encoded encrypted token |
required |
auth_settings
|
Auth | None
|
Optional auth settings (creates default if not provided) |
None
|
Returns:
| Type | Description |
|---|---|
str
|
Decrypted plaintext token |
Raises:
| Type | Description |
|---|---|
Exception
|
If decryption fails |