È abbastanza semplice instradare le richieste in base al fatto che abbiano o meno un determinato set di intestazione. Il trucco deriva dal determinare se è impostato correttamente.
La maggior parte dell'autenticazione web è simile a questa: richiedi una pagina. L'applicazione rileva che non hai inviato un cookie di sessione e ti reindirizza alla pagina di accesso. Accedi e ottieni un cookie di sessione. Richiedi nuovamente la prima pagina, il server legge il tuo cookie di sessione e lo convalida, quindi ti invia la pagina.
La parte difficile per te riguarda la convalida. Dici di non volere nessuna richieste non autenticate per farlo alla tua applicazione, ma ciò significa che non solo devi verificare che il client abbia inviato l'autenticazione, ma che sia valido . Altrimenti, è facile per un utente malintenzionato impostare semplicemente un valore arbitrario per l'intestazione di autenticazione e ottenere l'accesso alla tua applicazione.
Di solito direi che dovresti implementare i controlli di accesso nell'applicazione. Conosce il contesto delle varie pagine disponibili e disporre dell'autenticazione e dell'autorizzazione in bundle direttamente con l'app rende più difficile per un utente malintenzionato ignorare il livello auth. Tuttavia, in base alla tua domanda, presumo che questa non sia una soluzione fattibile per te (perché è un'app di terze parti che non puoi modificare, ad esempio).
Nginx è davvero bravo nel proxy delle richieste http. Non è particolarmente adatto all'implementazione della logica dell'applicazione. Avrei richieste proxy tutte di nginx a un'applicazione di autenticazione e tale applicazione inoltra le richieste autenticate all'applicazione principale. Questo sarà molto più semplice rispetto al tentativo di implementare il controllo dell'autenticazione in nginx.