Problème avec l'authentification ASP.NET par login [Résolu]

Messages postés
134
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
19 mai 2008
- - Dernière réponse : bidou_01
Messages postés
134
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
19 mai 2008
- 19 mai 2008 à 23:06
Bonjour,

Je viens vers vous car j'ai un problème avec l'authentification ASP.NET sur mon site Internet. Cela fait plusieurs semaines que je cherche, mais toujours le même problème.

Je souhaite à faire en sorte que mes utilisateurs n'est pas à se relogguer constamment, comme sur Codes-Sources, afin de rendre la navigation agréable.

J'utilise l'authentification ASP.NET par login.

Après avoir vérifié l'authenticité des informations d'identification saisie par l'utilisateur, je crée un tocket d'authentification de 4 ans, et un cookie de 4 ans, si l'utilisateur souhaite que le site se souvienne de lui :

if

(
Membership.ValidateUser(login_form.UserName, login_form.Password)){

          FormsAuthenticationTicket ticket =
new
FormsAuthenticationTicket(1,                    login_form.UserName,

                    DateTime.Now,

                    DateTime.Now.AddYears(4),                    login_form.RememberMeSet,

                    "",

                    FormsAuthentication.FormsCookiePath);

          string encryptedTicket =
FormsAuthentication.Encrypt(ticket);

          HttpCookie cookie =
new
HttpCookie(
FormsAuthentication.FormsCookieName, encryptedTicket);

          if (ticket.IsPersistent)                    cookie.Expires = ticket.Expiration;

          Response.Cookies.Add(cookie);

          Response.Redirect(

FormsAuthentication.GetRedirectUrl(login_form.UserName, login_form.RememberMeSet));}

Ensuite dans le global.asax, je check le cookie et renouvelle le ticket de l'utilisateur, le cas échéant :

public


void FormsAuthentication_OnAuthenticate(
object sender,
FormsAuthenticationEventArgs args){

          HttpCookie cookie = args.Context.Request.Cookies[
FormsAuthentication.FormsCookieName];
          
          
            if (cookie ==
null) {
return; }


                  FormsAuthenticationTicket Ticket =
null;


            try            {

                     Ticket =

FormsAuthentication.Decrypt(cookie.Value);             }

             catch            {

                  return;            }

            if ((
null == Ticket) || Ticket.Expired)            {

                  return;            }

            FormsAuthenticationTicket Ticket2 = Ticket;


            if (FormsAuthentication.SlidingExpiration)                  Ticket2 FormsAuthentication.RenewTicketIfOld(Ticket);            args.Context.User

new System.Security.Principal.
GenericPrincipal(
new
FormsIdentity(Ticket2),
new
string[0]);

            if (Ticket2 ! = Ticket)            {

                  string hash =
FormsAuthentication.Encrypt(Ticket2);

                  if (Ticket2.IsPersistent)                           cookie.Expires = Ticket2.Expiration;

                  cookie.Value = hash;

                  cookie.HttpOnly =

true;

                  if ( FormsAuthentication.CookieDomain ! null)                        cookie.Domain

FormsAuthentication.CookieDomain;                  args.Context.Response.Cookies.Add(cookie);

            }

}

Malgrès tout ça, mes utilisateurs doivent se relogguer toutes les 24 heures en moyenne. Sérieux là je n'y comprend vraiment rien, mon code me paraît juste.

Désolé pour la tartine de code, mais là il me faut de l'aide :)

Cordialement,

Bidou_01 

<hr />http://www.corioland.eu | http://www.mslive.fr
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
119
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
3 octobre 2016
1
3
Merci
Bonjour

j'ai cherché pedant longtemps aussi l'origine est du à l'hébergeur, si celui-ci est en load balancing ex: aspserveur ou ikoula et autre essaye avec machinekey dans ton web.config.

ceci dit moi j'ai résolu en changeant d'hebergeur.

Bruno POUPON webmaster@primactif.com
HTTP://WWW.PRIMACTIF.COM

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 5971 internautes nous ont dit merci ce mois-ci

Commenter la réponse de primactif
Messages postés
119
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
3 octobre 2016
1
3
Merci
Bonjour il faut générer une clé voir


 



http://support.microsoft.com/kb/312906/fr






Bruno POUPON webmaster@primactif.com
HTTP://WWW.PRIMACTIF.COM

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 5971 internautes nous ont dit merci ce mois-ci

Commenter la réponse de primactif
Messages postés
440
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
23 janvier 2011
0
Merci
bonjour,

dans le fichier web.config tu as créer des balises membership avec les paramètres timeout ?
Commenter la réponse de scottmat
Messages postés
134
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
19 mai 2008
1
0
Merci
Bonsoir,

J'ai des balises membership effectivement, mais pas de paramètre Timeout à ce niveau là. En revanche, j'ai jonglé avec le paramètre Timeout dans les balises :

Mon Blog] - [<>
Commenter la réponse de bidou_01
Messages postés
440
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
23 janvier 2011
0
Merci
non non j'ai dit une bétise ! ton timeout été bien placer, regarde cet article de microsoft : http://support.microsoft.com/default.aspx?scid=kb;EN-US;308157 en bas il en parler et au début ils mettent bien la structure que tu avait :

 <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx"
 protection="All" path="/" timeout="30" />

apparament par default sa serai réglé sur une heure, après à nous de personnaliser.
Commenter la réponse de scottmat
Messages postés
134
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
19 mai 2008
1
0
Merci
Bonjour, effectivement, c'est une heure par défaut. Mais il me semble que c'est ici le Timeout de session que l'on règle. Hors on m'a conseillé de ne pas le régler trop grand, pour eviter de faire péter le pool aspnet de IIS (en cas de trop nombreux visiteurs authentifiés). Mais ce que je ne comprend pas c'est que mon FormsAuthenticationTicket a une validité de 4 ans, donc lors de la lecture du cookie (qui a lui aussi une durée de vie de 4 ans) dans le global.asax, ce même ticket devrait logiquement être renouvellé.

J'avais testé je ne sais combien de fois de changer la valeur du timeout comme tu me l'as indiqué, mais toujours sans succès...

Merci quand même pour tes réponses :)

Cordialement,

Bidou_01 

<hr />
[Mon Blog] - [MSLive]
Commenter la réponse de bidou_01
Messages postés
134
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
19 mai 2008
1
0
Merci
Bonjour,

Effectivement mon hébergeur a mis en place une solution de Load Balancing il me semble! Je vais me renseigner de ce côté là. Qu'entend tu par "essaye avec machinekey dans ton web.config." ?

Merci pour ta réponse :)
Cordialement,

Bidou_01 

<hr />
[Mon Blog] - [MSLive]
Commenter la réponse de bidou_01
Messages postés
134
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
19 mai 2008
1
0
Merci
Je viens juste de trouver du temps pour essayer !! Je te tiens au courant !

Cordialement,

Bidou_01 

<hr />
[Mon Blog] - [MSLive]
Commenter la réponse de bidou_01
Messages postés
134
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
19 mai 2008
1
0
Merci
Merci beaucoup pour le coup de main ;) ça fonctionne parfaitement !

Cordialement,

Bidou_01 

<hr />
[Mon Blog] - [MSLive]
Commenter la réponse de bidou_01