Wie kann man große Cookies in Asp.Net Identity in kleinere aufteilen, um VIELE Ansprüche zu ermöglichen?

StackOverflow https://stackoverflow.com//questions/25025979

Frage

Ich arbeite an einem Prototyp einer anspruchsbasierten Autorisierung für unsere MVC-Anwendung.Wir verwenden Asp.Net Identity zur Authentifizierung.

Wir möchten für jede Controller-Aktion einen Anspruch haben und dann die Ansprüche der Benutzer abgeben bzw. wegnehmen, damit wir eine sehr genaue Kontrolle darüber haben, wer wohin gehen kann.

Unsere Anwendung verfügt bereits über 800 Aktionen und wächst weiter.Ich habe eine kleine Test-App erstellt, um zu sehen, wie mit dieser Anzahl von Schadensfällen umgegangen werden kann.Und stoße auf ein Problem: Cookies sind auf 4092 Bytes begrenzt.

Und eine große Anzahl von Ansprüchen erhöht das Cookie für die Identitätsauthentifizierung.Bei etwa 600 Ansprüchen mit kurzen Namen/Werten (jeweils 5 Zeichen) erhalte ich ein Cookie mit einer Größe von über 4 KB, und Benutzer mit dieser Anzahl von Ansprüchen können sich einfach nicht anmelden – das Cookie kann nicht in einem Browser gesetzt werden.

Und 600 Ansprüche sind für unsere App keine Grenze.Wir werden wahrscheinlich mehr als das brauchen.

Gibt es eine Möglichkeit, Auth-Cookies in einige kleinere Cookies aufzuteilen?

p.s.Wenn Sie neugierig sind, hier ist meine Code für Ansprüche „Profiler“ zusammen mit Rest des Projekts.

p.p.s.Ich kenne die Auswirkungen großer Cookies auf die Leistung.Mach dir im Moment keine Sorgen darüber.

Aktualisieren Derzeit gibt es keine Standardlösung für meine Antwort.Aber es sieht so aus, als wäre ich nicht der Einzige mit diesem Problem. Microsoft.Owin kümmert sich um das Auth-Cookie.Und aktueller Quellcode für Owin.Cookies hat ChunkingCookieManager die standardmäßig in zugewiesen ist CookieAuthenticationMiddleware.

Schlechte Nachrichten, dass dieser Code sehr aktuell ist (wurde am 10. Juli 2014 eingecheckt, nur 20 Tage alt).Es ist über die Vorabversion von Nuget verfügbar Microsoft.Owin.Security.Cookies.Ich bin mir nicht sicher, ob ich RC2 am Produktionsstandort verwenden möchte.

Gibt es eine andere Möglichkeit?

War es hilfreich?

Lösung 2

Ich habe die direkte Frage nicht gelöst.Das Cookie ist zu groß und bleibt bei einer großen Anzahl oder Ansprüchen groß.Owin v3.0 (derzeit in RC2, nicht produktionsbereit) bietet eine Möglichkeit, die Cookies in kleinere zu unterteilen.Aber große Kekse sind einfach schlecht.Daher behalte ich Ansprüche nur serverseitig bei.

Ich hatte ein Diskussion im Identitätsforum und gefunden Das Frage, die meine Fragen vollständig beantwortet.Basierend auf der Frage habe ich meine eigene Lösung erstellt und einen Prototyp einer kleinen MVC-App erstellt: https://github.com/trailmax/ClaimsAuthorisation.

Der Kern der Lösung liegt in Startroutine und da ist ein MVC-Filter Dabei wird geprüft, ob die erforderlichen Ansprüche für den Benutzer verfügbar sind.

Andere Tipps

Sie verwenden Ansprüche falsch.Ansprüche repräsentieren die Identität des Benutzers und nicht die Aktionen, die er ausführen darf.Sie stoßen auf Probleme, weil Sie Ansprüche wie ein Haus für Benutzerberechtigungen behandeln.Sie sollten wirklich einen Weg finden, die beiden in Ihrer Bewerbung zu trennen.

Im MVC-Stil würde dies bedeuten, ein benutzerdefiniertes Autorisierungsattribut zu erstellen, die Identität des Benutzers aus dem Anspruchscookie abzurufen und zu überprüfen, ob die Identität des Benutzers eine Aktion ausführen kann.

Siehe verwandte Fragen unten.

Beschränken des Zugriffs auf Datensätze.Sind anspruchsbasierte Berechtigungen eine gute Idee?

Beansprucht Autorisierung für bestimmte Ressourcen

Sie sollten Rolle verwenden

[Authorize(Roles = "Admin, Role1")]
  public ActionResult Index(string id)
{....}
[Authorize(Roles = "Admin, Role2")]
  public ActionResult Index2(string id)
{....}
[Authorize(Roles = "Admin, Role1, Role3")]
  public ActionResult Index3(string id)
{....}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top