Ho un'API che comunica con il mio cliente, ora voglio proteggere quell'API in modo che solo il mio cliente possa usarlo. Sto pensando di fare quanto segue, dal momento che non ho esperienza in questo ho raccolto tutto questo da una lettura sull'argomento e ho bisogno di un consiglio, ecco il mio flusso:
- Quando un utente accede / registra, genera un token (es: token = userId + date + radomvalue), salva questo token (hash) in un DBtable insieme a userId.
- Invia token (hash) al client, salva le preferenze per un uso futuro.
- Quando si chiama l'API questo token deve essere inviato con la richiesta, sul server, guardiamo attraverso la nostra tabella token e vediamo se troviamo la combinazione di userId + hashedToken, se lo facciamo, l'accesso è garantito.
Tutte le comunicazioni sono su SSL, ecco le mie domande:
- Che cosa devo fare per il TTL sui miei token? E cosa succede se ottengo 3 000 000 utenti, questo significa che ogni chiamata che faccio all'API deve guardare attraverso un tavolo con 3 000 000 di righe, ok?
- Ovviamente non posso fare in modo che i miei account di accesso / registro richiedano un token passato nella richiesta di accesso (dal momento che il client non ha ancora ottenuto), va bene lasciare questi "aperti"?
- Va bene inviare semplicemente testo + password ad api poiché è protetto da SSL, quindi cancellarlo sul lato server?
EDIT: 4. Pensandoci meglio, qualcuno non sarebbe in grado di afferrare il proprio token di accesso dal file delle preferenze e fare chiamate alla mia API dalla propria app, purché hanno l'endpoint e modificano ciò che vogliono sul proprio utente?
Modello di minaccia: sto costruendo un gioco. Ho un database in cui salvo classifica, esperienza e la versione del mio gioco (gratuita, senza pubblicità, premium). Dopo che qualcuno effettua un acquisto, chiamo endpointService.setVersion("userId", "PREMIUM")
;. Questa è l'unica risorsa ad alto valore reale per me, dal momento che non voglio che le persone lo modifichino da soli. Voglio solo proteggere i miei endpoint, ma soprattutto quello.