Laden...

ASP.NET Core Razor Pages - Wie setzt man einen Token clientseitig im HTTP Header

Erstellt von Unfug vor 5 Jahren Letzter Beitrag vor 5 Jahren 842 Views
U
Unfug Themenstarter:in
133 Beiträge seit 2006
vor 5 Jahren
ASP.NET Core Razor Pages - Wie setzt man einen Token clientseitig im HTTP Header

Hallo zusammen,

ich beschäftige mich gerade mit der Frage wie man einen Token bei Razor Pages Core im Header des Clients setzen kann.

Im Prinzip ist der Ablauf wie so oft: Benutzer meldet sich an und erhält einen Token. Dieser Token wird dann jedem Request vom Client übertragen.

Da der Token bei jedem Aufruf im Header mitgesendet werden muss, macht es natürlich Sinn diesen clientseitig zwischenzuspeichern.

Sind Cookies dafür weiterhin geeignet? Doch wie bekomme ich die dann in den Header?
Oder gibt es elegantere Wege?
Die Razor Pages sind übrigens nur eine weitere Ansicht. In de Desktop Anwendungen, welche auf die gleiche API später zugreifen wird einfach im HTTPClient der Token gesetzt.

Danke

16.842 Beiträge seit 2008
vor 5 Jahren

Ist das nen Token im Rahmen eines Pass-Through oder von was reden wir?
Erklärst Du leider nicht - und es gibt nicht nur eine Art von logischem Token.

U
Unfug Themenstarter:in
133 Beiträge seit 2006
vor 5 Jahren

Ach sorry.

Ja genau ein Pass-Through.

Die Infrastruktur für Benutzerverwaltung läuft schon länger. Ist eine klassische Rest API.
Es gibt nur eine Schnittstelle die das Anmelden Name+Passwort erlaubt. Bei dem Rest muss immer der Token (bearer) mitgesendet werden.
Bei den Aufrufen wird dann entsprechend reagiert, ob der Benutzer das darf oder nicht.

Es gibt 2 UIs derzeit. Eine PHP Anwendung sowie eine .NET WPF. Bei der PHP kann ich nicht sagen wie, jedoch bei der .NET WPF wird der Token einfach in den Header vom HTTPClient hinzugefügt (auch mit "bearer {token}").

Die Razor Page Core soll sozusagen wieder nur eine UI darstellen.
In den Razor Pages Codebehind soll dann wieder per Rest Call abgefragt werden, ob der Benutzer überhaupt auf diese Seite zugreifen darf.

Danke

Update 31.05.18:
Inzwischen bin ich etwas weiter. Und zwar scheint es doch üblich zu sein den Token bei dieser Variante in ein Cookie zwischenzuspeichern.
Laut "Internet" macht es auch Stackoverflow so.
Ich habe es mal getestet und es scheint auch gut zu klappen.



  var cookieOptions = new CookieOptions
                {
                    Expires = DateTime.Now.AddMinutes(10),
                    //HttpOnly = true  // javascript zugriff auf das cookie wird blockiert
                };
  Response.Cookies.Append("meinToken", Token, cookieOptions);


In den Actions selbst habe ich dann Abfragen wie :


 var token = Request.Cookies["meinToken"];
 CheckAuthoriziation(token);

Das funktioniert auch alles soweit. Wenn ich die Berichte so durchlesen, dann gibt es aber nicht "die perfekte Lösung". Ob Cookie Session oder Storage (Local, WebStorage). Alle Varianten weisen theoretische Sicherheitslücken bedenken auf.