0

Ich bin ein ASP.NET MVC Entwickler und ich habe kürzlich begonnen, AngularJS zu lernen, da es wie eine modernere Technologie scheint.Authentifizierung und Autorisierung in AngularJS

Es gibt jedoch ein paar Komplikationen in meinem Kopf, wenn es um Authentifizierung und Autorisierung in AngularJS geht. Insbesondere AngularJS mit ASP.NET Web API als Backend.

  1. Nach der Authentifizierung und dem Abrufen des Tokens von der API würde ich mir vorstellen, Angularjs zu verwenden, um das Token im Cookie zu speichern. Daher enthalten alle weiteren Anfragen das Token. Sagen Sie aus irgendeinem Grund, das Token läuft ab, die nächste angularjs Anfrage an die API wird mit Unbefugten fehlschlagen. Auf der Clientseite denkt angular jedoch, dass es authentifiziert ist (Cookies), und verwendet dieses ungültige Token weiterhin für alle Anfragen. Ich kann mir eine Lösung ausdenken, die bei jeder Anfrage auf die "unautorisierte" Antwort prüft und in diesem Fall zur Anmeldung umleitet. Aber ich würde wahrscheinlich für eine solche Praxis erschossen werden.

  2. In ASP.NET MVC ist das Schützen einer bestimmten Seite/Ressource so einfach wie das Hinzufügen von [Autorisieren]. Aber im Winkel scheint es sehr kompliziert zu sein. Wie schütze ich viele Seiten gegen nicht authentifizierte? Muss ich Setup und Interceptor für jede Route usw.?

  3. Das gleiche gilt für die Autorisierung, was passiert, wenn der authentifizierte Benutzer versucht, auf das Admin-Panel oder Teile des Admin-Panels zuzugreifen. Wie kann ich auf eine nicht autorisierte Seite umleiten, wenn sie über eine direkte URL aufgerufen wurde?

Antwort

0

Es kann viele Möglichkeiten, Ihr Dilemma zu lösen, aber lassen Sie mich Ihnen ein paar Tipps geben, die ich nutzen, um im Allgemeinen zu authentifizieren und autorisieren.

Ihre App muss sich mit der API authentifizieren (unabhängig von .NET oder anderen), was durch eine Anmeldeanforderung, die einen Cookie setzt (während einer Serverumleitung), oder einen Anmeldeendpunkt, der ein Token zurückgibt (wie mit oAuth). In beiden Fällen müssen Sie das Autorisierungstoken speichern, damit Angular darauf zugreifen kann. Ich benutze Cookies oder localStorage selbst. Wenn ein Benutzer authentifiziert wird, verfüge ich über einen Benutzerservicespeicher, damit ich ihn überall in der App verwenden kann.

Sobald dies passiert, können Sie eine request http interceptors verwenden, um den Autorisierungskopf an Ihre Anfrage anzuhängen. Sie können auch einen Interceptor verwenden, der den Fehler abfängt, wenn das Token nicht mehr akzeptiert wird (in der Regel ein 401-Statuscode, der leicht zu prüfen ist), und eine erneute Anmeldung erzwingen. Dies sollte das von Ihnen angesprochene Problem Nr. 1 ansprechen.

Dann für die Ausgabe # 2 und # 3, wenn Sie uiRouter verwenden, können Sie nach state change events (insbesondere $stateChangeStart) hören. Wenn ich eine Admin-Seite habe, werde ich sie admin.whatever nennen und dann ein Änderungsereignis haben, das prüft, ob der Status Admin hat oder nicht, und Benutzer umleiten, die keine Admins sind. Ebenso kann ich das gleiche für alle Zustände tun, um zu erkennen, ob kein gerade eingeloggter Benutzer vorhanden ist und erzwinge eine Login-Umleitung.

Hoffe, dass Sie einige Ideen haben, es klingt wie Sie auf der richtigen Spur sind, aber müssen in die Angular-Funktionen einhaken.

+0

Wenn Sie haben oder wissen, dass Beispiele mit einigen davon würde ich gerne sehen, wie es umgesetzt wird. – Caverman

+0

http://www.jvandemo.com/how-to-use-areas-and-border-state-to-control-in-an-angular-application-with-ui-router/ –

0

Dies ist nicht wirklich eine Antwort, aber ich bin im selben Boot wie Sie. Ich habe einige einfache Angular-Seiten und eine kleine SPA-App erstellt, aber jetzt versuche ich, alles in eine MVC-App zu integrieren, die .Net Identity verwendet. Überraschenderweise gibt es nicht viel zu diesem Thema. Ich bin auf ein gutes Beispiel gestoßen, aber es war mit .Net Core und MVC 6, auf die ich noch nicht vorbereitet bin. Es lohnt sich, zuzusehen und vielleicht gibt es ein paar Ideen.

http://stephenwalther.com/archive/2015/01/29/asp-net-5-and-angularjs-part-6-security

ein paar Tagen kam ich auf dieses Video und zum größten Teil scheint es, das Problem zu beheben. Es ist das einzige, was ich bisher mit MVC 5, Angular und einigen .Net-Autorisierung gefunden habe. Sieh dir an, ob es dir Ideen gibt. Ich hatte noch keine Gelegenheit, es umzusetzen, aber ich hoffe, dass ich in den nächsten Tagen damit anfangen kann. Wenn du etwas lernst oder etwas findest, poste es hier.

https://www.youtube.com/watch?v=f67PFtrldGQ&nohtml5=False