Was sind alle Dinge, die SetPasswordHashAsync im IPasswordStore in MVC 5 erledigen muss?

8

Ich bin ein wenig verwirrt, indem ich versuche, den IPasswordStore in der neuen asp.net mvc 5 zu implementieren. Ich möchte mein eigenes ORM verwenden.

Nehmen Sie dieses bekannte Code-Snippet aus dem gerafften 'AccountController', das ausgeführt wird, wenn der 'Register'-Bildschirm im Beispielprojekt verwendet wird.

%Vor%

das

%Vor%

line ruft zuerst die IPasswordStore-Funktion

auf %Vor%

ohne zuerst von IUserStore aus aufgerufen zu haben

%Vor%

Wie setze ich den Passwort-Hash, wenn der Benutzer noch nicht in der Datenbank erstellt wurde? Darüber hinaus wissen wir nicht einmal, ob wir den vorgeschlagenen 'Benutzer' erstellen können, da wir noch nicht überprüft haben, ob der Benutzername mit

übernommen wurde %Vor%

welches direkt danach aufgerufen wird.

Irgendwelche Ideen?

    
Isaac Bolinger 23.11.2013, 11:12
quelle

3 Antworten

2

Sie haben Recht damit, dass Sie den Kennwort-Hash für den Benutzer wahrscheinlich nicht beibehalten sollten, bevor der Benutzer erstellt wird. Sie können den Kennwort-Hash an einem Speicherort speichern, der zurückgesetzt wird, wenn der Benutzer tatsächlich nicht erstellt wird. Das Passwort sollte nicht gespeichert werden, bis der Benutzer erstellt und gespeichert wird, d. H. In CreateAsync(TUser user) .

Der IdentityUser in der EntityFramework-Implementierung wäre ein solcher Speicherort und würde es Ihnen ermöglichen, sowohl Benutzer- als auch Kennwortinformationen in der CreateAsync-Methode zu speichern. Ich sage nicht, dass Sie die Identity.EntityFramework-Assembly referenzieren sollten, nur dass ein Benutzerobjekt, das sowohl Benutzer- als auch PasswordHash-Informationen ähnlich dem IdentityUser hat, eine mögliche Lösung ist.

    
Olav Nybø 23.11.2013, 13:28
quelle
1

Legen Sie immer die Kennwort-Hash-Eigenschaft Ihres Benutzerobjekts im Textkörper der Methode IUserPasswordStore.SetPasswordHashAsync fest, da die Schnittstelle IUser die Eigenschaft nicht definiert, sodass UserManager sie nicht festlegen kann. Wenn Sie dies tun und dann nur den Benutzerdatenbankeintrag aktualisieren, wenn der Benutzer existiert, können Sie den Kennwort-Hash hinzufügen, wenn Sie Ihren Benutzer schließlich in der IUserStore.CreateAsync -Methode erstellen.

Dieser Prinzipal funktioniert auch für die Methode IUserSecurityStampStore.SetSecurityStampAsync .

    
stevehipwell 12.02.2014 10:20
quelle
0

Nun, ich war dort, habe den Quellcode für ASP.NET Identity von Git heruntergeladen und gefunden:

%Vor%

Wenn Sie Ihre eigenen zur Verfügung stellen, sollten Sie mindestens so sicher sein wie die "out of the box" -Lösung. als ich meine implementierte, betrachtete ich jede Funktion und implementierte meine eigene mit meiner eigenen Datenschicht und Klassen.

Ich habe am Ende ziemlich viel Code implementiert, den ich nicht haben würde, in Bezug auf das Hashing Ihrer Benutzer Passwörter, denen ich etwas Ähnliches anwende Zespris Antwort . Nennen Sie mich paranoid, nicht gerne die Standard-Salz für meine Passwörter verwenden ....

    
Walter Verhoeven 21.11.2015 12:59
quelle

Tags und Links