Mi problema es que no quiero que nadie más pueda usar la web
Servicio. Lo que significa que solo las aplicaciones deben poder llamar al
Servicio web para obtener información o ejecutar una acción en otro.
aplicación.
¿Hay alguna forma "simple" de hacerlo?
Hay varias maneras. Usted dice que usa HTTPS; para que pueda agregar un esquema de autenticación simple (secreto compartido) con una seguridad muy razonable. Supongo que las aplicaciones en sí están protegidas.
También puede emplear certificados de cliente para la conversación SSL (es decir, el canal SSL también proporciona certificación de identidad). Dependiendo de su configuración, podría ser más fácil de implementar que agregar autenticación al servicio web.
Posiblemente, puede utilizar un proxy de autenticación. Esto requiere una configuración más incómoda, ya que en la práctica usas el proxy para ejecutar un ataque de hombre en el medio contra tu propia conexión SSL. O puede usar algún tipo de front-end para servicios web desarrollado para ese propósito, que haría esencialmente lo mismo (identificándose a sí mismo como el servicio web real, y luego pasando la conexión al servicio web real después de eliminar la información de autenticación adicional).
En todos los casos, puede reducir la superficie de ataque negando rutinariamente el acceso a los servicios en el nivel de IP, a menos que las solicitudes provengan de un entorno de instalaciones de aplicaciones conocidas.
Una especialización de este enfoque sería establecer una VPN completa entre las aplicaciones y el servicio web. Esto tendría la ventaja de que ni las aplicaciones ni el servicio web requerirían una modificación sustancial, pero tendrían un costo de rendimiento (está ejecutando una conexión cifrada dentro de otra).
Pensé que ya que solo las aplicaciones tienen acceso a la
Base de datos, probablemente podría utilizarlo como un tercero de confianza para validar
la identidad del que llama al servicio web.
Puede, pero en ese momento sus aplicaciones ya están ya comunicándose con el sistema que ejecuta el servicio web a través de la base de datos. Cualquiera que sea el canal que esté utilizando para la base de datos, puede usar ese mismo canal / método, o debe sospechar que es inseguro.
Por ejemplo, las aplicaciones (o el servicio) ahora están accediendo a un servidor de base de datos externo . ¿Puede cualquier persona acceder a ese servidor? Si es así, podría tener algunos problemas allí mismo. Si no, ¿cuál es más probable, entonces por qué? (Y supongo que la respuesta es "conexión cifrada SSL, autenticación de contraseña / certificado y / o verificación de IP, o VPN completa").
Actualizar
En su configuración, las aplicaciones y los servicios web que exponen están en la misma máquina (esto no es tan común, por lo que no había pensado en la posibilidad). Esto permite "seguridad trivial", es decir, puede exponer la (s) interfaz (s) del servicio web en "localhost". Incluso puede usarlos en el claro, eliminando SSL por completo, ya que las comunicaciones de localhost no se filtrarán fuera de la máquina. Y para interceptarlos, uno necesitaría un nivel de acceso suficiente al servidor para que el punto sea discutible de todos modos.
Si lo desea, o si alguna vez lo necesita, puede también exponer un servicio web (¿diferente?) en la interfaz externa, y ejecutar ese punto final con autenticación y seguridad SSL (posiblemente también con verificación de certificado de cliente).
Como están las cosas, me parece que ya estás seguro . Simplemente verifique que la configuración predeterminada de las aplicaciones / marcos / servidores no incluya la vinculación a la interfaz a cualquier (muy a menudo es la predeterminada), porque eso potencialmente permitiría el acceso desde el exterior.