Если ваше приложение имеет фронтенд, который предназначен для запуска в веб-браузере, то лучше делайте отпечатки клиентов на стороне фронтенда средствами JavaScript, затем отправляйте их на бэкенд. Поищите информацию про способы снятия отпечатков браузера (browser fingerprinting) в сети. Обратите внимание на библиотеку
FingerprintJS.
Если нет возможности запускать JavaScript в браузере клиента либо вообще веб-сервис ориентирован не на браузер, то можно использовать различные техники снятия отпечатков на бэкенде. Для их реализации, скорее всего, потребуются техники низкоуровневого сетевого программирования (чтение необработанных заголовков HTTP-запроса и др.), возможно, выходящие за рамки стандартный возможностей Flask. Некоторые материалы по теме:
https://lwthiker.com/networks/2022/06/17/http2-fin...
https://github.com/CERT-Polska/hfinger
Идентификация по IP-адресу — не очень надёжный способ, т.к. в сети может присутствовать множество клиентов с одним и тем же внешним IP-адресом (к примеру, если у интернет-провайдера используется NAT, либо в публичных сетях Wi-Fi).