Utilisation de Custom MembershipProvider sans contrôle de connexion dans ASP.NET

StackOverflow https://stackoverflow.com/questions/41652

  •  09-06-2019
  •  | 
  •  

Question

Nous avons une coutume MembershipProvider dans ASP.NET.Il existe désormais 2 scénarios possibles dans lesquels l'utilisateur peut être validé :

  1. Connexion utilisateur via login.aspx page en saisissant son nom d'utilisateur/mot de passe.j'ai utilisé Contrôle de connexion et l'a lié au MyMembershipProvider.Cela fonctionne parfaitement bien.

  2. Un jeton d'authentification est transmis via une URL sous forme de chaîne de requête sur différents sites Web.Pour cela, j'ai une surcharge dans MembershipProvider.Validate(string authenticationToken), ce qui valide en fait l'utilisateur.Dans ce cas, nous ne pouvons pas utiliser le Contrôle de connexion.Maintenant, comment puis-je utiliser la même chose MembershipProvider pour valider l'utilisateur sans réellement utiliser le Contrôle de connexion?J'ai essayé d'appeler Validate manuellement, mais cela ne connecte pas l'utilisateur.

Voici l'extrait de code que j'utilise

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
    }
}
Était-ce utile?

La solution

Une fois la validation réussie, vous devez connecter l'utilisateur en appelant FormsAuthentication.Authenticate : http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx

MODIFIER:Il s'agit de FormsAuthentication.SetAuthCookie :http://msdn.microsoft.com/en-us/library/twk5762b.aspx

Aussi, pour rediriger l'utilisateur vers l'endroit où il souhaite aller, appelez :FormsAuthentication.RedirectFromLoginPage : http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx

texte du lien

Autres conseils

Vous pouvez définir le vôtre FormsAuthenticationTicket si la validation est réussie.

Quelque chose comme ça;

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  
    }   
}

Vous avez raison dans le cas du stockage direct des informations d’authentification sous forme de cookie.Mais en utilisant une fonction de hachage puissante (par ex.MD5 + SHA1) est génial et sécurisé.À propos, si vous utilisez des sessions (qui ne sont également qu'un cookie de hachage), vous pouvez y joindre des informations d'authentification.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top