2017-07-23 4 views
0

Grundsätzlich brauche ich Benutzerdaten auf allen Seiten der Website verfügbar. Ich brauche einige Benutzereigenschaften im Layout angezeigt werden, wie zB:MVC 5 Benutzerdaten auf allen Seiten verfügbar

[Benutzername], [Vorname], [Name], [E-Mail], [IsEmailVerified], [Telefon], [LastLoginDate] und 4 weitere Eigenschaften ...

Aber, müssen diese Aspekte berücksichtigt werden:

  1. Keine Verwendung von Session (ich es in meiner Anwendung deaktiviert).
  2. Keine Datenbankinteraktion bei jeder Anfrage, um diese Benutzereigenschaften zu erhalten - Ich möchte sie einmal Eigenschaften erhalten und sie irgendwo verfügbar speichern.
  3. Ich benutze Formularauthentifizierung.

nun von einer kleinen Suche ich gemacht habe, fand ich diesen Artikel aus dem Jahr 2008, die von Microsoft geschrieben, um Formularauthentifizierung: Storing Additional User Data in the Ticket und Using a Custom Principal.

Ich denke, das ist der nächste Ansatz, weil ich jetzt User.Identity.Name verwende, um nur den [Benutzername] in der Authentifizierung Ticket gespeichert, und ich liebe es zu verwenden, weil es schnell, verfügbar und einfach ist.

Aber Ich habe auch ein paar Fragen, die mich bei diesem Ansatz der Mühe:

  1. Die im Jahr 2008 veröffentlicht wurde, ist es für 2017 noch relevant? Gibt es heute etwas Besseres und Neues?
  2. Wie Sie oben sehen können, ich habe ziemlich viele Benutzereigenschaften, die in die Auth Cookie gehen müssen, und wie ich gelesen - eine Menge von Benutzerdaten in dem Auth-Cookie ist nicht empfehlenswert ...

Danke für die Helfer.

Antwort

1

Ja, es ist immer noch gültig. Obwohl die Leute Ihnen sagen werden, dass neuere Ansätze existieren, die Ansprüche beinhalten, und Sie sollten möglicherweise das neue Identitäts-Subsystem in Betracht ziehen, ist die alte Authentifizierung der guten Formulare immer noch eine der realisierbaren Optionen.

Wie bei "viele Daten", ist es nur einer der Shortcommings des Formularmoduls, es behandelt nicht mehrere Cookies, daher sind Sie durch die 4kb-Grenze eines einzelnen Cookies eingeschränkt. In Anbetracht der Verschlüsselung und Signierung werden dadurch wesentlich weniger Daten im benutzerdefinierten Datenbereich des Cookies verfügbar. Dennoch sollte es immer noch ausreichen, um eine einfache Serialisierung von etwa 10 Attributen zu haben.

Wenn Sie einen halben Schritt vorwärts machen möchten, können Sie einfach zum Sitzungsauthentifizierungsmodul wechseln, ein Vorteil ist, dass es auf Ansprüchen basiert und große Benutzerdaten unterstützt (da die Daten automatisch in Blöcke aufgeteilt werden)). Ich habe gebloggt auf, dass vor einiger Zeit

http://www.wiktorzychla.com/2014/11/forms-authentication-revisited-for-net.html

Ein Ausschnitt aus diesem Ansatz

var identity = new ClaimsIdentity("custom"); 
identity.AddClaim(new Claim(ClaimTypes.Name, txtLogin.Text)); 

var principal = new ClaimsPrincipal(identity); 

principal.AddClaim(new Claim(ClaimTypes.UserData, "whatever goes here")); 

SessionAuthenticationModule sam =  
     FederatedAuthentication.SessionAuthenticationModule; 
var token = 
sam.CreateSessionSecurityToken(principal, string.Empty, 
    DateTime.Now.ToUniversalTime(), DateTime.Now.AddMinutes(20).ToUniversalTime(), false); 

sam.WriteSessionTokenToCookie(token); 
+0

Die SessionAuthenticationModule klingt interessant ... Ich verstehe es verwendet die Formularauthentifizierung im Hintergrund?Und es hat nichts mit Session zu tun, obwohl es SessionAuthenticationModule heißt? –

+0

Es verwendet keine Formulare Auth im Hintergrund, es ersetzt das Formularmodul. Und nein, es hat nichts mit "Sitzungen" zu tun, an die Sie denken. Identity 2.0 verwendet auch das Modul, tatsächlich hätten Sie unter dem Namen WIF davon gehört (SessionAuthenticationModule und WSFederationAuthenticationModule sind beide Teil von WIF). –

+0

Ok, und wie erreichen Sie diese Ansprüche (Benutzerdaten)? über "Benutzer.Identität. {Anspruch}"? Gibt es auch einen Mangel mit WIF? –

Verwandte Themen