Sto sviluppando il back-end di un sistema di e-commerce, che ha clienti e account di tipo amministratore. Questi due ruoli non si sovrappongono, gli amministratori sono lì per fare il lavoro di back office, mentre i clienti fanno lo shopping.
Mi piacerebbe rendere il pannello di amministrazione completamente inaccessibile al pubblico. Se fossi l'unico sviluppatore, probabilmente opterei per lo sviluppo di due applicazioni per lo più legate dallo stesso database. Il mio ragionamento si basa principalmente sul principio del minimo privilegio - se non è necessario rendere pubblico qualcosa, allora perché dovrei? Inoltre, questo non significa che intendo implementare una debole sicurezza del cliente. Credo solo che se riuscirò a ottenere un po 'di sicurezza in più per questo specifico scenario, perché no?
Tuttavia, il mio collega, che sta eseguendo l'interfaccia utente, ha deciso di creare un'unica app con un'unica pagina di accesso per tutti gli utenti. Immagino che non sia davvero importante, e non sono appassionato di argomenti. Eppure mi piacerebbe ancora applicare il suddetto principio per rendere in qualche modo impossibile accedere come amministratore dal pubblico.
Stavo pensando:
- Avere un dominio principale mystore.com e un sottodominio admin.mystore.com entrambi che puntano allo stesso back-end.
- Consenti solo l'accesso al sottodominio tramite una connessione VPN (suppongo che eseguirò i controlli necessari nel codice dell'applicazione back-end).
- Se la richiesta di accesso proviene dal sottodominio di amministrazione, associo nuovamente le credenziali alla tabella degli amministratori. Altrimenti controllerei la tabella dei clienti.
Ai miei occhi, un amministratore non è un cliente, e dal momento che non condividono realmente alcun dettaglio a parte le credenziali di accesso e il nome completo, terrei questi due distinti.
Domande:
- In generale, il mio ragionamento ha senso, quanto è brutta questa idea e sto solo perdendo tempo?
- Se è fattibile, è solo possibile consentire l'accesso a un subdomian tramite una VPN? Purtroppo non so molto sull'impostazione delle VPN.
- Se non è fattibile, quale sarebbe il tuo consiglio? Avresti un sito, una pagina di accesso, una tabella comune e esattamente lo stesso livello di sicurezza sia per gli amministratori che per i clienti?
Ulteriori dettagli
Probabilmente non ho reso la mia limitazione molto chiara.
Diciamo che ho già un'app funzionante con una sola pagina dell'interfaccia utente, che non potrò modificare per una serie di motivi.
Questo codice UI ha una pagina di accesso, che chiama da qualche parte un endpoint di accesso, che restituisce un token. Sulla base di questo token, la pagina reindirizza l'utente all'amministratore o alla dashboard del cliente.
Le risorse dell'amministratore nel back-end sono, ovviamente, protette dai ruoli utente, quindi non è un problema enorme . Eppure, oltre a questo, voglio limitare il più possibile la possibilità di accedere come amministratore dall'Internet pubblica.
Ho completa libertà sul server e nessun controllo sull'interfaccia utente. Stavo pensando di separare amministratori e clienti in diverse tabelle e di instradare la richiesta di accesso in modo che corrisponda alla rispettiva tabella in base al modo in cui si accede all'endpoint. Se non riesco a ottenere ciò che voglio in questo modo, allora sembra come qualsiasi altra modifica richiederebbe una modifica dell'interfaccia utente.