Verwenden von Custom MembershipProvider ohne Login-Steuerelement in ASP.NET
-
09-06-2019 - |
Frage
Wir haben einen Brauch MembershipProvider
In ASP.NET
.Nun gibt es zwei mögliche Szenarien, in denen der Benutzer validiert werden kann:
Benutzeranmeldung über
login.aspx
indem Sie seinen Benutzernamen/Passwort eingeben.Ich habe benutzt Login-Kontrolle und verknüpfte es mit demMyMembershipProvider
.Das funktioniert einwandfrei.Ein Authentifizierungstoken wird über eine URL in einer Abfragezeichenfolge von verschiedenen Websites übergeben.Dafür habe ich eine Überladung drin
MembershipProvider.Validate(string authenticationToken)
, wodurch der Benutzer tatsächlich validiert wird.In diesem Fall können wir das nicht verwenden Login-Kontrolle.Wie kann ich nun dasselbe verwenden?MembershipProvider
um den Benutzer zu validieren, ohne ihn tatsächlich zu verwenden Login-Kontrolle?ich habe versucht anzurufenValidate
manuell, dies bedeutet jedoch nicht, dass der Benutzer angemeldet wird.
Hier ist der Codeausschnitt, den ich verwende
if (!string.IsNullOrEmpty(Request.QueryString["authenticationToken"])) {
string ticket = Request.QueryString["authenticationToken"];
MyMembershipProvider provider = Membership.Provider as MyMembershipProvider;
if (provider != null) {
if (provider.ValidateUser(ticket))
// Login Success
else
// Login Fail
}
}
Lösung
Nach erfolgreicher Validierung müssen Sie den Benutzer anmelden, indem Sie FormsAuthentication.Authenticate aufrufen: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx
BEARBEITEN:Es ist FormsAuthentication.SetAuthCookie:http://msdn.microsoft.com/en-us/library/twk5762b.aspx
Um den Benutzer wieder dorthin umzuleiten, wo er hin wollte, rufen Sie außerdem Folgendes auf:FormsAuthentication.RedirectFromLoginPage: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx
Andere Tipps
Sie können Ihre eigenen festlegen FormsAuthenticationTicket
wenn die Validierung erfolgreich ist.
Etwas wie das;
if (provider != null) {
if (provider.ValidateUser(ticket)) {
// Login Success
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1, //version
someUserName, //name
DateTime.Now, //issue date
DateTime.Now.AddMinutes(lengthOfSession), //expiration
false, // persistence of login
FormsAuthentication.FormsCookiePath
);
//encrypt the ticket
string hash = FormsAuthentication.Encrypt(authTicket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
Response.Cookies.Add(cookie);
Response.Redirect(url where you want the user to land);
} else {
// Login Fail
}
}
Wenn Sie die Authentifizierungsinformationen direkt als Cookie speichern, haben Sie Recht.Aber die Verwendung einer starken Hash-Funktion (z. B.MD5 + SHA1) ist großartig und sicher.Übrigens, wenn Sie Sitzungen verwenden (bei denen es sich auch nur um ein Hash-Cookie handelt), können Sie Authentifizierungsinformationen daran anhängen.