Estamos desarrollando una aplicación web (SPA) que consta de las siguientes partes:
El contenedor NextJS usa una clave de API para acceder a la API de datos. No queremos exponer la clave de API al cliente (navegador), por lo que el navegador envía las solicitudes de API al contenedor NextJS, que luego las transmite a la API de datos, consulte aquí . Esto parece seguro, pero es más complicado y más lento que enviar solicitudes desde el navegador a la API de datos directamente.
Me pregunto si es posible incluir en la lista blanca la aplicación web en la API de datos, de modo que el cliente (navegador) pueda llamar a la API de datos directamente sin la clave API, pero los terceros no pueden. FastAPI proporciona un TrustedHostMiddleware , pero no es seguro porque es posible falsificar el encabezado del host. Se ha sugerido incluir IP en la lista blanca en su lugar , pero no tenemos una IP dedicada para nuestra aplicación web. Busqué usar el encabezado de referencia, pero no está disponible en el objeto de solicitud de FastAPI por alguna razón (sospecho que hay algún problema de configuración en nuestro alojamiento). Además, el encabezado de referencia también podría falsificarse.
¿Hay alguna forma segura de incluir nuestra aplicación web en la lista blanca para el acceso a la API de datos, o necesitamos transmitir la solicitud a través del contenedor NextJS y usar una clave de API?
¿Hay alguna forma segura de incluir en la lista blanca nuestra aplicación web para acceder a la API de datos?
No, necesita en todos los casos un mecanismo de autenticación, algo antes del backend que verifique si el cliente es un cliente autorizado.
El patrón más simple es usar el contenedor NextJS como proxy. Proxy que tiene una clave de API para llamar al backend (lo que está haciendo actualmente).
Hay muchas formas de implementar un proxy seguro para un backend, pero esta lógica de autenticación no debe estar dentro del backend sino en un servicio separado (como envoy, nginx...)