Perché rendere la pagina di accesso a un'applicazione a pagina singola una pagina separata?


28

Mi chiedo perché sembra essere popolare avere la pagina di accesso di una SPA come una pagina separata che non è una pagina della SPA (come in caricamento e inviare dati tramite richieste Ajax)?

L'unica cosa a cui riesco a pensare è la sicurezza, ma non riesco a pensare a un motivo di sicurezza specifico. Voglio dire, l'unica cosa che viene in mente è che se la tua pagina di accesso in una parte della SPA, invia il nome utente / password tramite Ajax che può essere visto da strumenti come Firebug o Web Inspector, anche se lo invii normalmente Richiesta POST, ci sono altri strumenti che possono facilmente catturare questi dati (come fiddler, httpscoop, ecc ...).

C'è qualcosa che mi manca?


2
Non penso che ci sia o debba essere una ragione in questo caso. Direi, perché no?
Steven Evers,

1
La mia tesi contro questo sarebbe che avere la pagina di accesso come una pagina html separata mentre il resto dell'applicazione sia un'architettura SPA sembra strano senza alcun vantaggio reale (anche se il punto che msanford ha fatto merita).
Ryanzec,

@ryanzec Grazie. Ho aggiunto un esempio nel tentativo di illustrare che c'è un vero vantaggio. Innanzitutto, il risparmio derivante dal rinvio del caricamento degli asset altrove non è trascurabile, soprattutto in caso di accesso non riuscito (o sospensione dell'account, ecc.). In secondo luogo, è molto più veloce da implementare rispetto a un sistema di moduli asincrono più sofisticato basato sulla dipendenza e il ciclo di vita dello sviluppo è una considerazione importante (vedi il mantra dell'ufficio di Opbeat * (contiene volgarità)).
msanford,

"anche se lo invii come una normale richiesta POST, esistono altri strumenti che possono facilmente acquisire questi dati". Sicuramente il tuo modulo di accesso è protetto da HTTPS ?
Ajane

@ajlane sì, il mio login (e in realtà l'intera applicazione) verrà eseguito dietro HTTPS
Ryanzec,

Risposte:


18

Presumibilmente è per salvare il caricamento di un sacco di risorse sul lato client (come pesanti framework JavaScript, immagini, ecc. ) Che sono richiesti solo dall'applicazione.

Esistono mezzi più sofisticati per raggiungere un simile obiettivo prestazionale (vedi " Malte Ubl e John Hjelmstad: un approccio nuovo ed efficiente al caricamento di JavaScript - JSConf EU 2012 ") ma questo è abbastanza veloce da implementare e probabilmente altrettanto efficace, soprattutto se la tua app web utilizza comunque quasi tutte le tue risorse.

Puoi vederlo in natura in un sito come la http://infogr.am beta:

  1. http://infogr.am/login/ carica i file jquery , raphael , js personalizzati e 3 css.
  2. http://infogr.am/beta/ (la pagina SPI principale dell'applicazione) carica 10 framework javascript, 5 file CSS esterni e circa 60 immagini.

Aggiornamento: nel 2016 con il front-end angular2 e un back-end JBoss, lo facciamo ancora per lo stesso motivo.
msanford,

18

Penso che ci siano alcuni argomenti ragionevoli a favore o contro, e direi che anche la tecnologia ha un ruolo nella decisione.

Si potrebbe sostenere che avere una "pagina" di accesso separata consente l'uso di "Sicurezza directory". Generalmente chiunque può vedere la "pagina" di accesso, ma solo gli utenti autenticati possono visualizzare la "pagina" dell'applicazione e la sua "directory". I percorsi possono anche essere bloccati, dove / Account / è diverso da / App / e ognuno ha il proprio "profilo" di sicurezza.

Inoltre, se si utilizza un approccio SPA e si mescolano l'autenticazione con l'esperienza dell'applicazione, la logica potrebbe essere contorta. Invece di dare per scontato che l'utente sia "loggato perché si trova qui", è necessario controllare costantemente il proprio stato di autenticazione e chiedere "se questo utente si trova qui".

Inoltre, la pagina di accesso si trova generalmente sul sito rivolto al consumatore .. vai su www.yourapp.com e contiene alcune informazioni, contatti, supporto, ecc. E una pagina di "accesso" .. dalla pagina di accesso, dopo autenticazione, puoi reindirizzare a un intero host di target ..

Il motivo per cui tengo una pagina di accesso separata e perché in realtà ho un'app completamente diversa per il mio sito "rivolto al consumatore" è perché posso esporre molto poco a chi non è autenticato. Per caso qualche idiota inizia a sbattere sulla mia pagina di accesso, non voglio che ciò influisca sul lato app delle cose .. anche se il login sta solo eseguendo una semplice ricerca di autenticazione .. mi aiuta a evitare che il bozo influisca sul mio esperienza degli utenti .. Il peggiore dei casi, il mio sito di consumo si arresta e nessuno può accedere, ma almeno gli utenti che hanno effettuato l'accesso non lo sapranno e la loro esperienza non inizierà a rallentare .. Non sto dicendo che sia la scelta a prova di proiettile .. ma almeno ho isolato il rischio nell'area non autenticata ..


1
La sicurezza è spesso un grande motivo.
Giustino

1
@JustinC: spiegami su una pagina separata per accedere in modo più sicuro?
Ryanzec,

Non necessariamente attraverso gli attributi del file system (ma può essere se questo è ciò che richiede la situazione), ma il contenitore di app Web / software servlet / runtime tramite l'applicazione di metodi di autenticazione / autorizzazione selettivi applicati su una risorsa specifica o su un gruppo di risorse nel suo insieme (in termini pratici, una directory): per la pagina di accesso e particolari risorse statiche (immagini, fogli di stile, pagine di errore), l'accesso anonimo è spesso sufficiente; per altre pagine, potrebbe essere necessaria un'autenticazione / autorizzazione più specifica.
Giustino

2
L'autenticazione all'esterno dell'app isola l'autenticazione dall'essere una preoccupazione dell'app. La sicurezza effettiva dipenderà dall'implementazione e dalla tecnologia
hanzolo,

aggiornamento 2017: IdentityServer
hanzolo,

10

Un motivo per farlo è perché è quindi possibile utilizzare le normali sessioni basate su cookie. L'utente accede, la risposta invia i cookie insieme alla pagina principale iniziale ... e quindi tutte le successive chiamate Ajax inviano il cookie al server.


6

Vedo alcuni motivi per farlo:

  1. Posso usare le normali regole di controllo dell'accesso basate sul percorso in web.xml.
  2. Non posso mai essere sicuro di aver protetto correttamente tutta la mia applicazione Ajax e devo fare test approfonditi per essere sicuro.
  3. Posso delegare l'autenticazione a un framework (come Spring Security), un'applicazione di terze parti o una soluzione SSO (come CAS o JOSSO).
  4. Posso lasciare il nome utente della cache del browser e (facoltativamente) le password per l'utente.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.