Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

TMA Authenticator

Python library for Telegram Mini App (TMA) and Web3 TON wallet authentication.

Features

  • 🔐 TMA Authentication: Telegram Mini App user authentication
  • 🌐 Web3 TON Authentication: TON wallet authentication via TON Connect
  • 🔑 JWT Token Generation: Secure token generation for both auth methods
  • 🔗 Unified Authentication: Single endpoint supporting TMA, Web3, and service tokens
  • 💾 Caching: Built-in caching for nonces and tokens
  • ✅ Full Test Coverage: Comprehensive test suite
  • 📚 Type Hints: Full type annotation support

Installation

pip install tma-authenticator

Or from source:

git clone https://github.com/your-repo/python-tma-authorization
cd python-tma-authorization
pip install -e .

Quick Start

TMA Authentication

from tma_authenticator.tma_authentication_router import TMAAuthenticationRouter
from tma_authenticator.tma_authenticator import TMAAuthenticator
from database.users import UsersDatabase
from config import TELEGRAM_BOT_TOKEN, IMPERSONATE_ADMIN_PASSWORD

user_database: UsersDatabase = UsersDatabase()
authenticator = TMAAuthenticator(TELEGRAM_BOT_TOKEN, IMPERSONATE_ADMIN_PASSWORD, user_database)
authentication_router = authenticator.authentication_router

Web3 TON Authentication

from fastapi import FastAPI
from aiocache import Cache
from tma_authenticator.web3_ton_router import Web3TonRouter

app = FastAPI()

# Setup cache
Cache.from_url("memory://")

# Create Web3 TON router
web3_router = Web3TonRouter(
    jwt_secret="your-super-secret-jwt-key",
    jwt_algorithm="HS256",
    jwt_expiration_minutes=60,
    nonce_ttl_seconds=300,
)

# Include router
app.include_router(web3_router)

Unified Authentication

The TMAAuthenticator supports three authentication methods that can be used independently or combined:

  1. TMA Authorization (Authorization header) - Telegram Mini App token
  2. Service Token (X-Service-Token header) - Service-to-service JWT
  3. Web3 Token (X-Web3-Token header) - Wallet-based JWT (NEW)

Web3 Token Authentication

from tma_authenticator import TMAAuthenticator

authenticator = TMAAuthenticator(
    service_name="my-app",
    bot_token="YOUR_BOT_TOKEN",
    auth_url="https://auth-service.com",
    storage_provider=storage,
    jwt_secret="your-secret-key",  # Enable Web3 support
    jwt_algorithm="HS256"
)

@app.get("/protected")
async def protected_route(user = Depends(authenticator.oauth_verify_token)):
    # Accepts any of the three token types
    return {
        "user_id": user.tg_id,
        "username": user.username,
        "wallet": user.wallet_address  # Present when Web3 token is used
    }

Usage:

# Web3 token only
curl -H "X-Web3-Token: Bearer <JWT>" https://api.example.com/protected

# TMA + Web3 (combine Telegram identity with wallet)
curl -H "Authorization: Bearer <TMA_TOKEN>" \
     -H "X-Web3-Token: Bearer <WEB3_JWT>" \
     https://api.example.com/protected

See WEB3_TOKEN_AUTHENTICATION.md for complete documentation.

Web3 TON Authentication

The library now supports TON wallet authentication following the TON Connect 2.0 specification.

Available Endpoints

  1. GET /.well-known/jwks.json - JWKS public keys endpoint
  2. GET /web3/nonce?wallet=<address> - Generate nonce for wallet
  3. POST /web3/ton/check-proof - Verify TON proof and get JWT token

Authentication Flow

1. Client requests nonce: GET /web3/nonce?wallet=0:abc...
2. Client signs proof with TON wallet using TON Connect
3. Client submits proof: POST /web3/ton/check-proof
4. Server verifies proof and returns JWT token
5. Client uses JWT token for authenticated requests

Example Usage

See WEB3_TON_AUTH.md for complete documentation and examples.

Quick example:

# Step 1: Get nonce
curl "http://localhost:8000/web3/nonce?wallet=0:0e911c7..."

# Step 2: Submit proof (after signing with wallet)
curl -X POST "http://localhost:8000/web3/ton/check-proof" \
  -H "Content-Type: application/json" \
  -d '{
    "ton_addr": {
      "address": "0:0e911c7...",
      "network": "-3",
      "publicKey": "b3e155...",
      "walletStateInit": "te6cc..."
    },
    "ton_proof": {
      "proof": {
        "domain": {"lengthBytes": 4, "value": "t.me"},
        "payload": "2025-12-22T14:55:08.825Z",
        "signature": "360QU7...",
        "timestamp": 1734876508
      }
    }
  }'

Documentation

Testing

# Run all tests
pytest

# Run Web3 TON tests only
pytest tests/test_web3_ton_router.py -v

# Run with coverage
pytest --cov=tma_authenticator

Examples

Requirements

  • Python 3.8+
  • FastAPI
  • aiocache
  • python-jose
  • pytoniq-core
  • pynacl

See requirements.txt for complete list.

License

MIT License - See LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Metadata

Release files for tma-authenticator 2.0.1.dev32547

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

Source distribution (sdist)

Source distribution for tma-authenticator 2.0.1.dev32547
File Size Uploaded
tma_authenticator-2.0.1.dev32547.tar.gz 15.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tma-authenticator 2.0.1.dev32547
File Interpreter ABI Platform
tma_authenticator-2.0.1.dev32547-py3-none-any.whl Python 3 none any Details

Total release size: 33.1 kB

Release files / tma_authenticator-2.0.1.dev32547.tar.gz

Download URL tma_authenticator-2.0.1.dev32547.tar.gz
Size 15.6 kB
Tags Source
SHA-256 checksum
How to use checksums
312ecc1083ddb230f2f64043fd3b66bcf840d6fae465907560e17623f0b99393
BLAKE2b-256 checksum
How to use checksums
733cb7a7c4e0c1ad05ad519d2387203d08a6b027b6977662be0ddd870006f25e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.2.1 CPython/3.12.12 Linux/5.4.0-146-generic

Release files / tma_authenticator-2.0.1.dev32547-py3-none-any.whl

Download URL tma_authenticator-2.0.1.dev32547-py3-none-any.whl
Size 17.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ba640600bda5bb00db1541eeeeb9c1bbde1c815436d89db07b81c804b6bfd873
BLAKE2b-256 checksum
How to use checksums
9e8706b54b03e8f48e0cfa67dc9a91c4e36cde54b2bbe065b88d289c2400edac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.2.1 CPython/3.12.12 Linux/5.4.0-146-generic

Release history Release notifications | RSS feed

3.0.0

2 release files

2.2.1

2 release files

2.1.0

2 release files

2.0.1

2 release files

This release

2.0.1.dev32547 This release

2 release files

2.0.0

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.1

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