Sicurezza dell'API in cui il server è anche lato client

0

Ho un'applicazione desktop che crea e memorizza una discreta quantità di dati (principalmente da solo, non attraverso l'input dell'utente tradizionale); per lo più di natura statistica.

Attualmente i dati sono per lo più accessibili solo ad altre applicazioni che ho scritto io stesso e non sono esposti all'utente se non attraverso queste applicazioni.

Sto considerando di consentire l'accesso di terzi a questi dati tramite un'API REST o simili, ma in questo caso il "server" sarebbe effettivamente in esecuzione sulla stessa macchina del client (o un'altra macchina nella stessa LAN, al massimo).

Tuttavia, poiché questo accesso è destinato alla monetizzazione, desidero avere un qualche tipo di autenticazione per consentire a client specifici di accedere a sottoinsiemi specifici dei dati, piuttosto che fornire permessi generali.

(Quindi l'obiettivo non è l'autenticazione dell'utente, ma l'autenticazione dell'app client, in senso umano tutti i dati sono per un utente, ma dovrebbero essere accessibili solo tramite app autorizzate.)

Ovviamente dal momento che tutto sta funzionando lato client, in pratica ho già perso (un utente sufficientemente determinato non avrebbe problemi nell'estrarre e nello spoofing le credenziali, e AFAIK è letteralmente impossibile prevenirlo) - ma quale sarebbe il migliori pratiche per fornire un ragionevole livello di sicurezza contro utenti non sufficientemente determinati?

La maggior parte delle solite raccomandazioni per l'autenticazione dell'API REST (SSL, OAuth, ecc.) non sembrano realmente applicabili poiché assumono un server separato e sicuro. (E SSL si occupa principalmente della convalida del server.)

    
posta Miral 17.07.2017 - 02:16
fonte

1 risposta

1

È possibile utilizzare certificati client generati da una fonte esterna.

Quando si sta configurando un servizio di terze parti, uno dei passaggi dovrebbe contattare un server autorevole per vedere quali autorizzazioni dovrebbe avere e se l'utente ha pagato per il feed di contenuto. In questo passaggio è anche possibile generare un certificato ssl del client e firmarlo con un'autorità di certificazione interna. Quindi, quando un client di terze parti si connette all'API sul desktop, tutto ciò che deve fare è presentare il suo certificato e l'API può controllare l'hash delle autorità di firma per verificarne l'autenticità e concedere le autorizzazioni dichiarate.

La funzione che verifica il certificato dovrebbe essere il più vicino possibile al codice nativo, dato che è banale modificare un file interpretato per restituire sempre true per un controllo del certificato.

    
risposta data 19.07.2017 - 12:46
fonte

Leggi altre domande sui tag