ASP.NET MVC-Authentifizierung mit benutzerdefinierten Datenbank anstelle von ASPNETDB?
Ich habe bereits eine User
Tabelle in meine primäre Anwendung, die Datenbank mit einem E-Mail-Adresse (als Benutzername) und ein Passwort. Ich möchte die Authentifizierung mit meiner Datenbank anstelle der Standard-Authentifizierung Datenbank (ASPNETDB).
Fragen:
- Ist das eine schlechte Idee? Ist es eine riesige Dose Würmer, um meine eigene DB für die Authentifizierung?
- Wie viel Arbeit bin ich dem hinzufügen, indem Sie dies zu tun? Ich habe bereits code der für das Hashen des Passwortes und eine Abfrage, die prüft, ob die E-Mail und Kennwort entsprechen den DB. Also, ich würde mich nicht von vorne anfangen.
- Was müsste ich tun, um meine Datenbank statt ASPNETDB? Ich hoffe, dass dieses beschrieben werden kann, in ein paar einfachen Schritten, aber wenn nicht, könntest du mir eine gute Quelle?
Update
Ich bin noch auf der Suche nach ein wenig mehr Details hier auf meiner Dritten Frage. Brauche ich zu schreiben mein eigenes MembershipProvider
? Welche änderungen muss ich machen, um meine web.config-Datei? Wird die [Authorize]
Attribut noch arbeiten, wenn ich Schreibe, meine eigene Lösung? Kann ich die automatisch generierte AccountController mit einigen geringfügigen änderungen, oder muss ich im Grunde neu schreiben müssen der account-controller von Grund auf neu?
InformationsquelleAutor der Frage devuxer | 2010-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ganz einfach, Sie müssen derrive MembershipProvider und implementieren Sie die ValidateUser-Methode. Werfen Sie einen Blick auf diese post. Ich bin mit custom membership provider mit Postgres und MVC gut.
InformationsquelleAutor der Antwort Davorin
Werde ich beantworten Ihre aktualisierte Fragen:
Wenn Sie (a) möchten weiterhin die Formularauthentifizierung verwenden, und (b) eine Berechtigung Tabelle Struktur, die nicht folgt den gleichen Konventionen wie die ASPNETDB, dann ja. Wenn Sie nicht brauchen, FormsAuth (siehe unten), dann Sie können tun, Weg mit der
MembershipProvider
ganz, aber ich würde nicht empfehlen es. Oder, wenn Sie mit genau der gleichen Sicherheit Tabellen als ASPNETDB aber will nur zeigen Sie es auf einer anderen Datenbank, können Sie weiterhin mit der default-provider und ändern Sie einfach seine Konfiguration.Wenn Sie Ihre eigenen benutzerdefinierten
MembershipProvider
, dann müssen Sie registrieren, in der<providers>
Abschnitt der<membership>
- element und ändern Sie diedefaultProvider
Eigenschaft. Wenn Sie mit dem standardAspNetSqlProvider
dann haben Sie wahrscheinlich nur brauchen, um die Verbindungszeichenfolge ändern.Ja, wenn man sich an die Forms-Authentifizierung (entweder über den
AspNetSqlProvider
oder schreiben und registrieren Sie Ihre eigenen membership-provider). Nein, wenn Sie verlassen die Formularauthentifizierung (wieder, nicht zu empfehlen).Sollten Sie umschreiben die
AccountController
sowieso nicht verlassen, demo-code in einer Produktions-app. Aber wenn es sein muss - ja, dieAccountController
wird unter den gleichen Bedingungen wie oben.InformationsquelleAutor der Antwort Aaronaught
Nicht. Und ich würde vermuten, die meisten Menschen nicht darauf Vertrauen, dass cruddy Mechanismus
Nicht viel, zumal man die Tabelle schon.
Werfen Sie einen Blick auf dieses Beispiel: http://forums.asp.net/t/1250726.aspx
InformationsquelleAutor der Antwort UpTheCreek
Tun wir genau dies in einer unserer Anwendungen, und finden es ziemlich einfach. Wir haben eine Authentifizierungs-service (von der Steuerung) behandelt die mechanik der Hash des eingegebenen Passworts, um zu sehen, ob eine übereinstimmung vorliegt, dann einfach einen bool zurückgibt, für eine Methode nennen wir "IsValidLogon".
In unserem Fall, der Zweck war das halten die Verwaltung von dem, was sollte eine ziemlich einfache Aufgabe, so einfach wie möglich.
Wir bascially ignoriert ASPNETDB ganz. Wenn wir eine gültige Antwort von unserem user/Passwort überprüfen, rufen Sie einfach die standard-FormsAuthentication.RedirectFromLoginPage(Benutzername, createCookieBool);
Hoffe, das hilft.
InformationsquelleAutor der Antwort reallyJim
nur das gleiche Gebäude, so Antwort zu 1 sein muss, NEIN 🙂
Ich bin mit dem standard asp.net forms-Authentifizierung, wo ich die FormsAuthentication.RedirectFromLoginPage(Benutzername, createCookieBool) - Methode zum anmelden eines Benutzers.
Ich gab ein Benutzer eine eindeutige guid (Sie können jede andere user-id) und ich bin mit der Speicherung in der UserName-parameter zusammen mit dem Benutzernamen (für die Anzeige auf der masterpage: Html.Encode(Seite.Benutzer.Identität.Name.Split("|".ToCharArray())[1]))
In jedem controller/Methode, bei der ich wissen muss, welcher Benutzer angemeldet ist (über Benutzer.Identität.Name, teilen Sie die Zeichenfolge und Holen Sie sich die userguid).
Auch ich schmücken diese Routinen mit den [Genehmigen] - Attribut.
InformationsquelleAutor der Antwort Michel
Hi ,
Folgen Sie einfach diesen einfachen Schritten :
Ersten, können Sie löschen .mdf Datei im App_Data-Ordner. Da brauchen wir keine dieser Tabellen.Dann, wir müssen die Aktualisierung der Standard-Verbindungszeichenfolge in der web.config-zu-Punkt unserer Datenbank.
Dritten, Öffnen Sie Nuget-Paket-Manager und schreiben Sie die folgenden Befehle:
Überprüfen Sie Ihre Datenbank, die alle ASP.NET die Mitgliedschaft in Tabellen mit dem Präfix Asp wurden erstellen und dann können Sie testen Sie es aus, indem Sie Ihre Anwendung und führen Sie die Mitgliedschaft Aktionen wie der Anmeldung oder mit der Anmeldung in Ihrer Anwendung.
Erstellt Tabellen nach ausführen der oben genannten Befehle:
Quelle : https://blogs.msmvps.com/marafa/2014/06/13/how-to-create-asp-net-mvc-authentication-tables-in-an-existing-database/
InformationsquelleAutor der Antwort Houssam Nasser