My problem is that I don't want anyone else to be able to use the web
service. Meaning that only the applications should be able to call the
web service to get information or execute an action on another
application.
Is there any "simple" way to do that?
Ci sono diversi modi. Tu dici di usare HTTPS; quindi è possibile aggiungere un semplice schema di autenticazione (segreto condiviso) con una sicurezza molto ragionevole. Presumo che le applicazioni stesse siano protette.
È anche possibile utilizzare i certificati client per la conversazione SSL (ad esempio, il canale SSL fornisce anche la certificazione di identità). A seconda della configurazione, potrebbe essere più semplice da implementare rispetto all'aggiunta dell'autenticazione al servizio web.
Probabilmente, puoi usare un proxy di autenticazione. Ciò richiede una configurazione più scomoda, dal momento che in pratica si utilizza il proxy per eseguire un attacco man-in-the-middle contro la propria connessione SSL. Oppure puoi utilizzare una sorta di front-end compatibile con i servizi Web sviluppato a tale scopo, che farebbe essenzialmente lo stesso (identificarsi come il vero servizio web, quindi passare la connessione al servizio web reale dopo aver rimosso ulteriori informazioni di autenticazione).
In tutti i casi, puoi ridurre la superficie di attacco negando sistematicamente l'accesso ai servizi a livello IP, a meno che le richieste non provengano da una serie di installazioni di applicazioni conosciute.
Una specializzazione di questo approccio sarebbe quella di stabilire una VPN completa tra le applicazioni e il servizio web. Ciò avrebbe il vantaggio che né le app né il servizio web richiederebbero modifiche sostanziali, ma comporterebbero dei costi di rendimento (si sta eseguendo una connessione crittografata all'interno di un'altra).
I figured that since only the applications have access to the
database, I could probably use it as a trusted third party to validate
the identity of the one calling the web service.
Puoi, ma a quel punto le tue applicazioni sono già in comunicazione con il sistema che esegue il servizio web attraverso il database. Indipendentemente dal canale che utilizzi per il database, puoi utilizzare lo stesso canale / metodo oppure sospettare che non sia sicuro.
Ad esempio, le applicazioni (o il servizio) stanno ora accedendo a un server di database esterno - può chiunque acceda quel server? Se sì, potresti avere qualche problema proprio lì. Se no, che è più probabile, allora perché? (E suppongo che la risposta sia "Connessione crittografata SSL, autenticazione password / certificato e / o verifica IP, o VPN completa").
Aggiornamento
Nella tua configurazione, le applicazioni e i servizi Web che espongono sono sulla stessa macchina (non è così comune, motivo per cui non avevo pensato a questa possibilità). Ciò consente la 'sicurezza banale', ad esempio, è possibile esporre le interfacce del servizio Web su "localhost". Puoi persino usarli in chiaro, eliminando del tutto il protocollo SSL, poiché le comunicazioni localhost non fuoriusciranno dalla macchina. E per intercettarli, è necessario un livello sufficiente di accesso al server che il punto sia comunque valido.
Se vuoi, o se ne hai mai bisogno, puoi anche esporre un (diverso?) servizio web sull'interfaccia esterna ed eseguire quell'estremità con autenticazione e sicurezza SSL (possibilmente anche con controllo del certificato client).
Allo stato attuale mi sembra che tu sia già al sicuro . Basta controllare che la configurazione predefinita di applicazioni / framework / server non includa il binding a qualsiasi interfaccia (è molto spesso l'impostazione predefinita), perché che consentirebbe potenzialmente l'accesso dall'esterno.