Warum sollte die Anmeldeseite einer Einzelseitenanwendung eine separate Seite sein?

28

Ich frage mich, warum es so beliebt zu sein scheint, dass die Anmeldeseite eines SPA eine separate Seite ist, die keine Seite des SPA ist (wie beim Laden und Senden von Daten über Ajax-Anforderungen).

Ich kann nur an Sicherheit denken, aber ich kann keinen bestimmten Sicherheitsgrund finden. Ich meine, das Einzige, was mir in den Sinn kommt, ist, dass Ihre Anmeldeseite in einem Teil des SPA den Benutzernamen / das Passwort über Ajax sendet, was von Tools wie Firebug oder Web Inspector angezeigt wird, auch wenn Sie es wie gewohnt senden POST-Anfrage, gibt es andere Tools, die diese Daten leicht erfassen können (wie Fiddler, httpscoop, etc ...).

Fehlt mir etwas?

Ryanzec
quelle
2
Ich glaube nicht, dass es in diesem Fall einen Grund gibt oder geben muss. Ich würde argumentieren, warum nicht?
Steven Evers
1
Mein Argument dagegen wäre, dass die Anmeldeseite als separate HTML-Seite vorliegt, während der Rest der Anwendung eine SPA-Architektur ist, die seltsam ohne wirklichen Nutzen erscheint (obwohl der von msanford vorgebrachte Punkt durchaus einen Wert hat).
Ryanzec
@ryanzec Danke. Ich habe ein Beispiel hinzugefügt, um zu veranschaulichen, dass es einen echten Nutzen gibt. Erstens sind die Einsparungen durch die Verschiebung des Ladevorgangs von Assets an anderer Stelle nicht unerheblich, insbesondere im Fall einer fehlgeschlagenen Anmeldung (oder einer Kontosperrung usw.). Zweitens ist es viel schneller zu implementieren als ein komplexeres asynchrones, abhängigkeitsbasiertes Modulsystem, und der Entwicklungslebenszyklus spielt eine wichtige Rolle (siehe Opbeats Office-Mantra * (enthält vulgarity)).
msanford
"Auch wenn Sie es als normale POST-Anforderung senden, gibt es andere Tools, mit denen diese Daten problemlos erfasst werden können." Sicher ist Ihr Login-Formular durch HTTPS geschützt ?
Ajlane
@ajlane Ja, mein Login (und eigentlich die gesamte Anwendung) läuft hinter HTTPS
ryanzec

Antworten:

18

Vermutlich geht es darum, das Laden einer Reihe von clientseitigen Ressourcen (z. B. umfangreiche JavaScript-Frameworks, Bilder usw. ) zu sparen , die nur von der Anwendung benötigt werden.

Es gibt ausgefeiltere Mittel, um ein ähnliches Leistungsziel zu erreichen (siehe " Malte Ubl & John Hjelmstad: Ein neuartiger, effizienter Ansatz zum Laden von JavaScript - JSConf EU 2012 "), aber dies ist ziemlich schnell umzusetzen und wahrscheinlich genauso effizient, insbesondere wenn Ihre Web-App verwendet sowieso fast alle Ihre Ressourcen.

Sie können dies in freier Wildbahn auf einer Website wie der Betaversion von http://infogr.am sehen :

  1. http://infogr.am/login/ lädt jquery , raphael , custom js und 3 css files.
  2. http://infogr.am/beta/ (die Haupt-SPI-Seite für die Anwendung) lädt 10 Javascript-Frameworks, 5 externe CSS-Dateien und etwa 60 Bilder.
msanford
quelle
Update: 2016 machen wir dies mit eckigem 2-Frontend und einem JBoss-Backend immer noch aus dem gleichen Grund.
Msanford
18

Ich denke, es gibt einige vernünftige Argumente dafür oder dagegen, und ich würde sagen, dass Technologie auch eine Rolle bei der Entscheidung spielt.

Man könnte argumentieren, dass eine separate Anmeldeseite die Verwendung von "Directory Security" ermöglicht. Im Allgemeinen kann jeder die Anmeldeseite sehen, aber nur authentifizierte Benutzer können die Anwendungsseite und das Verzeichnis anzeigen. Routen können auch gesperrt werden, wobei sich / account / von / app / unterscheidet und jede Route ein eigenes "Sicherheitsprofil" hat.

Wenn Sie einen SPA-Ansatz verwenden und Authentifizierung mit Anwendungserfahrung mischen, kann sich die Logik auch verwickeln. Anstatt davon auszugehen, dass der Benutzer "angemeldet ist, weil er hier ist", müssen Sie seinen Authentifizierungsstatus ständig überprüfen und nachfragen, "ob dieser Benutzer hier ist".

Außerdem befindet sich die Anmeldeseite im Allgemeinen auf der verbraucherorientierten Website. Sie gehen zu www.yourapp.com und haben einige Informationen zu Informationen, Kontakten, Support usw. sowie eine Anmeldeseite von der Anmeldeseite nach Authentifizierung können Sie auf eine ganze Reihe von Zielen umleiten.

Der Grund, warum ich eine separate Anmeldeseite führe, und warum ich eine völlig andere App für meine "Consumer Facing" -Seite habe, ist, dass ich nur sehr wenig Unauthentifizierten aussetzen kann. Durch Zufall schlägt ein Trottel auf meiner Anmeldeseite zu. Ich möchte nicht, dass dies die App-Seite beeinflusst. Selbst wenn die Anmeldung nur eine einfache Authentifizierungssuche durchführt. Es hilft mir irgendwie, zu verhindern, dass die Bozos meine beeinflussen Benutzererfahrung .. Im schlimmsten Fall geht meine Verbraucherseite aus und niemand kann sich anmelden, aber zumindest die angemeldeten Benutzer wissen es nicht und ihre Erfahrung wird nicht langsamer. Ich sage nicht, dass dies die beste Wahl ist. Aber zumindest Ich habe das Risiko für den nicht authentifizierten Bereich isoliert.

Hanzolo
quelle
1
Sicherheit ist oft ein wichtiger Grund.
JustinC
1
@JustinC: erklärst du mir auf einer separaten Seite, um dich sicherer einzuloggen?
Ryanzec
Nicht unbedingt über Dateisystemattribute (es kann jedoch sein, dass dies der Fall ist), sondern über den Web-App-Container / die Servlet-Software / die Laufzeit durch Anwendung selektiver Authentifizierungs- / Autorisierungsmethoden, die entweder auf eine bestimmte Ressource oder auf eine Ressourcengruppe angewendet werden als Ganzes (in der Praxis ein Verzeichnis): Für die Anmeldeseite und bestimmte statische Ressourcen (Bilder, Stylesheets, Fehlerseiten) reicht oft ein anonymer Zugriff aus; Für andere Seiten ist möglicherweise eine speziellere Authentifizierung / Autorisierung erforderlich.
JustinC
2
Durch die Authentifizierung außerhalb der App wird die Authentifizierung von der Betroffenheit der App getrennt. Die tatsächliche Sicherheit hängt von der Implementierung und der Technologie ab
hanzolo
Update 2017: IdentityServer
hanzolo
10

Ein Grund dafür ist, dass Sie dann normale Cookie-basierte Sitzungen verwenden können. Der Benutzer meldet sich an, die Antwort sendet ein Cookie zusammen mit der anfänglichen Hauptseite ... und dann senden alle nachfolgenden Ajax-Aufrufe das Cookie zurück an den Server.

GroßmeisterB
quelle
6

Ich sehe ein paar Gründe dafür:

  1. Ich kann normale pfadbasierte Zugriffssteuerungsregeln in web.xml verwenden.
  2. Ich kann nie sicher sein, dass ich meine gesamte Ajax-Anwendung ordnungsgemäß geschützt habe, und ich muss umfangreiche Tests durchführen, um sicher zu sein.
  3. Ich kann die Authentifizierung an ein Framework (wie Spring Security), eine Drittanbieteranwendung oder eine SSO-Lösung (wie CAS oder JOSSO) delegieren.
  4. Ich kann den Browser Benutzernamen und (optional) Passwörter für den Benutzer zwischenspeichern lassen.
n0rm1e
quelle