Sto pensando di limitare la frequenza delle richieste anonime basate su IP, ma per gli utenti con un token di autenticazione valido, non riesco a decidere se è meglio registrare e valutare le richieste limite in base al loro UserId o indirizzo IP.
Opzione 1 : 15 richieste al minuto per UserId
Opzione 2 : 30 richieste al minuto per indirizzo IP
Opzione 3 : esegui entrambi
Se una persona / entità malevola decide di eseguire un attacco bot contro le API, l'opzione migliore sembra essere la limitazione della velocità in base all'indirizzo IP perché possono potenzialmente avere molti token pronti per gli utenti con diversi, per esempio, indirizzi email (supponendo che ogni utente si registri con un indirizzo email univoco).
Tuttavia, esiste anche la possibilità che un individuo sofisticato possa cambiare indirizzo IP durante l'attacco ma passare lo stesso token di autenticazione e abusare del sistema con lo stesso UserId.
La terza opzione sembra allettante, ma per me significa che ogni richiesta API deve essere scritta due volte nel database (i record sono partizionati orizzontalmente in base a UserId e c'è un altro schema di partizionamento basato sull'indirizzo IP. Sharding renderà più semplice per cercare e contare le richieste).
Esistono buone pratiche per quanto riguarda l'opzione (o qualcos'altro) da perseguire quando si limitano gli utenti autenticati? Mi piacerebbe avere un'idea generale di cosa fare prima di scrivere a fondo tutta la logica di validazione?