Rendere accessibili API solo dalla propria app

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Ciao,
ho un sistema client - server e ho implementato delle API.
Ora il mio scopo è quello di renderle accessibili solamente dalla mia app.
Ho letto JSON Web Token, ma ho un dubbio. Chiunque utilizza l'API di login per accedere, avrà il token per poi fare le altre richieste.

La mia idea era quella di utilizzare una chiave sul client e una sul server.
Sul client cifro i parametri da inviare, in un certo ordine, e li cifro con la chiave del client.
Sul server faccio l'operazione inversa. Il problema però è che chiunque faccia il reverse dell'app può capire come la chiave venga generata.
Quindi sarei costretto ogni tot ad aggiornare questa chiave, con il problema che se non tutti poi aggiornano l'app, non funziona niente più.

Avete dei consigli in merito?
 

mleonix

Nuovo Utente
91
10
CPU
Intel I7 3770K
Scheda Madre
AsRock Z77 Extreme 6
HDD
SSD Samsung 840 Pro 128Gb + HHD Seagate 1TB 7200rpm 64MB
RAM
Patriot Memory Viper 3 Black Mamba 1600MHz 16GB (2x8GB) CL9
GPU
Integrata
Audio
Integrata
Monitor
LG IPS235P-BN 23"
PSU
XFX ProSeries 550W
Case
Cooler Master HAF 912 Plus ATX
OS
Debian
Forse potrebbe esserti utile la tecnica del Mutual authentication ma non ne sono sicuro
 

pabloski

Utente Èlite
2,868
916
Avete dei consigli in merito?

Puoi benissimo usare la crittografia. Però non capisco perchè dici che usando l'autenticazione, TUTTI sarebbero poi in grado di usarle. Per autenticarsi c'è bisogno di fornire delle credenziali e solo quelle accettate producono un token JWT, che poi userai per tutte le successive operazioni.

Inoltre potresti considerare l'utilizzo dei Websocket. Cioè si tratta di una cosa del tutto simile ai normali socket, su cui client e server possono inviare dati in maniera asincrona.

Nella pratica apri il Websocket, invii una sequenza di autenticazione. Dopo che client e server si sono riconosciuti a vicenda ( e anche qui potresti usare la crittografia a chiave asimmetrica ), il socket resta aperto e ognuno di loro può inviare dati all'altro quando gli pare.

La differenza pratica è che i websocket sono stateful, mentre le normali connessioni http sono stateless. Il vantaggio è l'eliminazione di qualsiasi tipo di cookie ( JWT o altro ) per mantenere l'identità e lo stato di autenticazione del client.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!