2017-05-09 8 views
0

Ich habe gelesen, wie JSON Web Tokens einrichten und alle Beispiele, die ich gefunden habe, implementieren die Authentifizierungslogik auf der Client-Seite (z. B. generator-angular-fullstack).Authentifizierung mit JWT: Server oder Client-Seite?

Stellen Sie sich als Beispiel eine App vor, in der Benutzer auf ein persönliches Dashboard zugreifen können, indem sie einfach zur Stammadresse gehen. Wenn nicht authentifiziert, sollte der Benutzer zu einer Login- oder Zielseite weitergeleitet werden. Nach den Best Practices des eckigen Fullstack-Generators lädt der Client zunächst die gesamte Angular-App herunter, die dann für die Authentifizierung und das Routing verwendet wird und bei Bedarf zur Anmeldeseite umgeleitet wird.

Angenommen, die meisten Besucher haben noch kein Konto, warum sollten sie den ganzen Code herunterladen, nur um ihnen schließlich eine Logging-Seite zu zeigen?

Wäre es nicht besser, eine einfache Anmeldeseite nur für nicht authentifizierte Benutzer und die eckige Anwendung nur für Benutzer bereitzustellen, die bereits über ein gültiges Token verfügen? Wenn ja, warum finde ich keine Beispiele auf diese Weise?

Antwort

0

Sie stehen vor einem der Probleme der tokenbasierten Authentifizierung in Frontend-Anwendungen: Bei der ersten Anforderung vom Client an den Server ist der Anmeldestatus dem Server unbekannt.

Wenn Ihr Login-Formular nicht Teil Ihrer Angular-Anwendung ist, ist dies ein häufiger Anwendungsfall für Cookie/Sitzung basierte Authentifizierung, weil Cookies mit der ersten Anfrage geliefert werden. Auf diese Weise weiß der Server, ob er die eckige Anwendung bedienen oder zum Anmeldeformular umleiten soll.

Aber wenn Ihr Login-Formular Teil Ihrer eckigen Anwendung ist, sehe ich keine Probleme bei der Bereitstellung der gesamten Anwendung. Nach dem Einloggen (Senden von Benutzername + Passwort an einen Server) erhalten Sie ein Token, das Sie für alle weiteren Anfragen verwenden. In einer klassischen Einzelseitenanwendung enthält dies keine zusätzlichen Neuladevorgänge.

+0

Aber JWT kann als Cookie gespeichert werden (wie in dem obigen Beispiel implementiert) und in der ersten Anfrage gesendet werden, so dass der Server in der Lage sein sollte zu erkennen, ob dieser Client authentifiziert ist oder nicht. In der Tat, ich sehe nicht, wie sich das unterscheidet von einer vollständigen Aktualisierung, sobald Ihre App geladen und autorisiert ist. Sie müssen sich nicht auf Angular verlassen, um dieses Token zu senden. Was die Praktikabilität anbelangt, nehmen Sie an, dass Sie eine erhebliche Anzahl an einmaligen Besuchern ohne Konto haben. Die Bereitstellung einer dünnen Landing Page würde die Ladezeiten beschleunigen und Bandbreite sparen. Oder habe ich etwas falsch verstanden? – Funkatic

Verwandte Themen