Frage

Wir haben einen Brauch MembershipProvider In ASP.NET.Nun gibt es zwei mögliche Szenarien, in denen der Benutzer validiert werden kann:

  1. Benutzeranmeldung über login.aspx indem Sie seinen Benutzernamen/Passwort eingeben.Ich habe benutzt Login-Kontrolle und verknüpfte es mit dem MyMembershipProvider.Das funktioniert einwandfrei.

  2. 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 anzurufen Validate 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
    }
}
War es hilfreich?

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

Link Text

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top