2009-09-28 8 views
2

J'essaie de recréer mon cookie ce qui serait normalement généré par FormsAuthentication.SetAuthCookie() et ce qui est dans le webconfig.Qu'est-ce que je fais de mal avec mon formulaire FormsAuthenticationTicket?

<authentication mode="Forms"> 
      <forms loginUrl="~/Account/LogOn" protection="All" timeout="20160" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="false" defaultUrl="default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/> 
     </authentication> 

Cependant je veux envoyer une pièce de plus de données le long de façon à ce que je comprends que je dois faire mon propre FormsAuthenticationTicket d'ajouter ces données (ou fusionner tout avec le nom en SetAuthCookie et faire le fractionnement).

Donc j'essaye de le rendre aussi sûr (ou plus sûr) que celui qu'il fait du webconfig, avoir les mêmes valeurs que celui généré par le webconfig.

Voilà donc ce que j'ai jusqu'à présent

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "chobo2", DateTime.Now, DateTime.Now.AddYears(10), true, "test"); 
      string encTicket = FormsAuthentication.Encrypt(ticket); 
      Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 

Cependant, je ne suis toujours pas sûr de ce qu'il utilise. Utilise-t-il des choses du webconfig? Comme il ne demande pas de cookieName ni de timeout.

Lorsque je regarde ce cookie par l'intermédiaire du développeur Web, il dit qu'il n'est pas sécurisé, et qu'il expire à la fin de la session.

Quand je regarde celui qui a été généré depuis le webconfig, il a une date d'expiration du 12 octobre et ne dit toujours pas sécurisé (devinez qu'il se réfère à SSL).

Aussi je suis toujours confus au sujet de l'userData. Comment ajouter que j'attrape cette valeur plus tard? Comment puis-je ajouter plus d'une fois des données? Dois-je toujours décrypter (ie appeler la méthode decrypt) pour déchiffrer le cookie ou le fait-il automatiquement?

Quel type de cryptage le cookie utilise-t-il par défaut de toute façon?

Merci

Répondre

3

Vous devez définir manuellement tous ces propriétés sur le ticket d'authentification de formulaires. Vous pouvez accéder à la plupart des valeurs via des accesseurs statiques sur la classe FormsAuthentication. Les paramètres de configuration dans web.config sont uniquement utilisés lorsque vous utilisez FormsAuthentication.GetAuthCookie ou FormsAuthentication.SetAuthCookie.

Les données utilisateur peuvent être récupérées en extrayant et en décryptant le ticket d'authentification de formulaires puis en utilisant l'accesseur de propriété UserData sur le ticket déchiffré.

Vous aurez toujours besoin de déchiffrer le ticket pour accéder aux données utilisateur.

http://msdn.microsoft.com/en-us/library/ms998310.aspx contient des détails sur les chiffrements de chiffrement et de validation utilisés, mais par défaut, le ticket est chiffré à l'aide d'AES et validé à l'aide de SHA1 (HMACSHA1).

http://support.microsoft.com/kb/910443 contient des informations supplémentaires et des liens qui peuvent répondre à vos questions.

+0

Hmm ok alors alors que fait le contenu du nouveau ticket FormsAuthenticationTicket()? Comme j'ai mis l'heure d'expiration et il ne fait rien. Alors, à quoi servent ces choses? – chobo2

+1

Je pense que vous confondez le cookie avec le ticket. Le ticket est la chose qui gère l'état d'une session authentifiée entre le client et le serveur, le cookie est simplement le moyen par lequel l'état est stocké sur le client. L'expiration des cookies détermine quand le cookie expire sur le client. L'expiration du ticket détermine quand le ticket expire * sur le serveur *. Les paramètres de ticket sont interrogés sur le serveur pour déterminer la validité de la session authentifiée et associer le principal/l'identité approprié à la requête en cours d'exécution. – Neal

+0

Alors que se passe-t-il si je veux que l'utilisateur reste authentifié pendant 2 semaines? qu'est-ce que je mets? – chobo2

Questions connexes