2009-05-08 10 views
1

J'essaie de naviguer d'un site Web sur mon hôte local vers un deuxième site Web sur mon hôte local.Authentification et fournisseur ASP.NET

Les deux sites ont leur propre fournisseur d'appartenances. J'essaie d'utiliser un FormsAuthorizationTicket du site # 1 à SSO un utilisateur dans le site # 2.

Actuellement Je reçois cette erreur: System.Security.Cryptography.CryptographicException: Rembourrage est invalide et ne peut pas être retiré

mesures que j'ai prises jusqu'à présent comprennent: l'élément Réglage des valeurs clés spécifiques Définissez les attributs machineKey de la validation et du chiffrement sur "3DES". Vérifié en enregistrant que le ticket chiffré a la même valeur sur le site Web # 2 que sur le site Web # 1.


Mon code est ici:

 *FormsAuthentication.Initialize(); 
     FormsAuthenticationTicket newTicket = new 
      FormsAuthenticationTicket(1 // Ticket Version 
      , Login1.UserName      // User Name 
      , DateTime.Now       // Creation Date 
      , DateTime.Now.AddDays(1) // Expiration Date 
      , true            // Is Persistant 
      , Login1.UserName);     // This should be a list of Roles 


     string strEncyptedTicket = FormsAuthentication.Encrypt(newTicket); 
     HttpCookie myCookie = new HttpCookie("cryptCookie", strEncyptedTicket); 
     myCookie.Values.Add("username", Login1.UserName); 
     myCookie.Values.Add("cryptTick", strEncyptedTicket); 
     Response.Cookies.Add(myCookie);* 

sur le site # 2 J'ai créé une page de destination pour vérifier le ticket et rediriger vers une page membres seulement. Au cours du décryptage est quand je reçois l'erreur spécifiée ci-dessus.

Voici mon code de page de destination sur le site n ° 2:


 *FormsAuthenticationTicket fat2 = FormsAuthentication.Decrypt(Request.Cookies["cryptCookie"].Values["cryptTick"]); 


     MembershipUser mu = Membership.GetUser(Request.Cookies["cryptCookie"].Values["username"]); 
     if (mu == null) 
     { 
      lblInfo.Text += "member not found"; 
      return; 
     } 

     Response.Redirect(@"~\MemberPages\MemberPage.aspx");* 

Si quelqu'un a une idée pour aider, je serai heureux d'essayer.

Répondre

1

Les deux sites doivent partager le même machine key.

+0

Ma clé machine est définie dans mon fichier machine.config, dont je crois qu'elle est héritée par les deux sites Web (puisque les deux sont sur mon hôte local). Y a-t-il autre chose que je dois faire pour répondre à cette exigence? \t \t

+0

Il était plus d'une observation qu'une réponse. Si vous utilisez l'IIS intégré dans VS (ce localhost: 3123/yoursite) je ne pense pas qu'ils partagent des cookies. À long terme, vous rencontrerez un problème pour traverser un domaine (monsite1.com vers votresite3.net) –

0

Ian a raison de dire que vos sites doivent avoir une clé machine correspondante. En outre, vous devez vous assurer que vos fournisseurs d'appartenances ont les mêmes paramètres, notamment en ce qui concerne le chiffrement des mots de passe.

Aussi, pourquoi manipulez-vous ceci complètement dans le code? Vous devriez être capable de configurer cette fonctionnalité avec le Web.Config des deux sites très facilement. Essentiellement, vous faites beaucoup de retouches et vous présentez des domaines problématiques potentiels où cela n'est pas nécessaire (sauf si vous avez une raison que vous n'avez pas mentionnée ici).

+0

Je gère cela dans le code parce que je ne suis pas sûr de la façon dont il est possible de le faire dans le fichier web.config. Ce sont deux sites distincts, qui seront sur deux domaines différents à l'avenir avec différents membreshipproviders.Essentiellement, je veux que le site n ° 1 autorise un utilisateur, puis transmette une valeur de rôle dans le ticket afin que le site n ° 2 sache quelles fonctionnalités permettent à cet utilisateur. De ce que j'ai lu ceci ne peut pas être manipulé dans la config de Web. Pouvez-vous me conduire à résoudre cela dans le web.config? –

+0

Comme Ian l'a indiqué ci-dessus, si vos sites vivent sur deux domaines distincts (pas seulement des sous-domaines), vous ne pourrez pas partager de cookies entre eux. –