4.2.6. Fingerprint Provider
Fingerprint Provider
Internal microservice that serves browser fingerprints from a centralized database. It retrieves stored fingerprint data and, for supported antibot vendors, transforms it to match a desired user agent before returning it. For agent-side usage (configuration and script integration), see the Fingerprint Provider guide.
How It Works
- Receives a fingerprint request with filters (antibot vendor, website, collection date)
- Queries the SQL Server database for a random matching fingerprint
- If the vendor is Arkose, decrypts the BDA payload, updates the user agent and timestamp, re-encrypts it, and returns the forged fingerprint. The Arkose vendor is dealt with the (now deprecated) Github repo Unfuncaptcha-bda - many thanks !
- Otherwise, returns the raw fingerprint data
API
GET /get-fingerprint
Request body (JSON):
| Field | Type | Description |
|---|---|---|
antibot_vendor |
string | Antibot vendor name (e.g. "arkose") |
website |
string | Target website identifier |
collection_date_day |
int | null | Day component of the minimum collection date |
collection_date_month |
int | null | Month component of the minimum collection date |
collection_date_year |
int | null | Year component of the minimum collection date |
The three date fields together form a single date (YYYY-MM-DD). Only fingerprints collected on or after this date will be returned — older fingerprints are excluded. The date is split into separate fields to avoid format ambiguity. Setting all three to null removes the date filter, returning fingerprints from any date.
| additional_data | object | Vendor-specific data (e.g. {"desired_ua": "..."} for Arkose) |
Response: The transformed fingerprint payload (format depends on the vendor).
Environment Variables
| Variable | Description |
|---|---|
SQL_SERVER_NAME |
SQL Server hostname |
SQL_SERVER_USER |
Database user |
SQL_SERVER_PASSWORD |
Database password |
SQL_SERVER_DB |
Database name |
Project Structure
fingerprint-provider/
├── main.py # FastAPI application and endpoint
├── config.py # Environment variable loading and DB config
├── db.py # Database connection, query building, and fetching
├── Dockerfile
├── requirements.txt
└── src/
├── crypto.py # AES-CBC encryption/decryption (BDA)
├── fingerprint.py # ArkoseBrowserFingerprint class
└── forge_arkose_fingerprint.py # Arkose fingerprint transformation logic
Running Locally
pip install -r requirements.txt
python main.py
The service starts on port 5005.
Docker
docker build -t fingerprint-provider .
docker run -p 5005:5005 \
-e SQL_SERVER_NAME=... \
-e SQL_SERVER_USER=... \
-e SQL_SERVER_PASSWORD=... \
-e SQL_SERVER_DB=... \
fingerprint-provider