Utilisation de Custom MembershipProvider sans contrôle de connexion dans ASP.NET
-
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é :
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é auMyMembershipProvider
.Cela fonctionne parfaitement bien.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 choseMembershipProvider
pour valider l'utilisateur sans réellement utiliser le Contrôle de connexion?J'ai essayé d'appelerValidate
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
}
}
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
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.