Problème avec l'authentification ASP.NET par login

Résolu
bidou_01 Messages postés 134 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 19 mai 2008 - 8 mars 2008 à 11:43
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

9 réponses

primactif Messages postés 119 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 octobre 2016 1
25 mars 2008 à 23:07
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
3
primactif Messages postés 119 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 octobre 2016 1
26 mars 2008 à 13:41
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
3
scottmat Messages postés 438 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 23 janvier 2011 1
10 mars 2008 à 23:15
bonjour,

dans le fichier web.config tu as créer des balises membership avec les paramètres timeout ?
0
bidou_01 Messages postés 134 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 19 mai 2008 1
10 mars 2008 à 23:24
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] - [<>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scottmat Messages postés 438 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 23 janvier 2011 1
10 mars 2008 à 23:45
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.
0
bidou_01 Messages postés 134 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 19 mai 2008 1
11 mars 2008 à 09:24
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]
0
bidou_01 Messages postés 134 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 19 mai 2008 1
26 mars 2008 à 00:29
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]
0
bidou_01 Messages postés 134 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 19 mai 2008 1
17 mai 2008 à 19:08
Je viens juste de trouver du temps pour essayer !! Je te tiens au courant !

Cordialement,

Bidou_01 

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

Cordialement,

Bidou_01 

<hr />
[Mon Blog] - [MSLive]
0
Rejoignez-nous