2012-09-03 6 views
0

J'ai 2 sites Web, le premier est myFirst.domain.com et le second est mySecondSite.domain.com. Ils restent sur deux serveurs Web différents et mon but est de permettre l'authentification intersite (mon besoin réel est partagé FormsAuthentication Cookie).AuthenticationForm - Cross Site Cookies

J'ai correctement configuré mon fichier web.config (noeud de clé machine, noeud de formulaire). La seule différence est à propos de loginUrl où sur myFirstSite apparaît comme ~/login.aspx, et sur mySecondSite il apparaît comme http://myFirstSite.com/login.aspx.

Notez que je n'ai pas de répertoire virtuel, j'ai seulement 2 applications web différentes. Le problème: lorsque j'atteins la page de connexion myFirstSite de mySecondSite, je ne suis jamais redirigé depuis la page de connexion, il semble qu'un cookie ne soit pas écrit.

Voici quelques extraits sur la question:

MyFirsSite:

<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES" /> 
     <authentication mode="Forms"> 
      <forms loginUrl="login.aspx" name="authCookie" enableCrossAppRedirects="true"></forms> 
     </authentication> 
     <authorization> 
      <deny users="?" /> 
      <allow users="*"/> 
     </authorization> 

code monPremierSite derrière:

FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, "userName..", DateTime.Now, DateTime.Now.AddMinutes(30), true, "roles.."); 

     string ticket = FormsAuthentication.Encrypt(fat); 

     HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticket); 
     authCookie.Expires = fat.Expiration; 
     authCookie.Domain = "myDomain.com"; 
     Response.Cookies.Add(authCookie); 

//Here is other stuff about querystring checking in order to execute exact redirect, however it's not working, I always return to the login page. 

MySecondSite:

<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES"/> 
     <authentication mode="Forms"> 
      <forms loginUrl="http://myFirstSite.domain.com/login.aspx?queryStringToIndicateUrlPage" enableCrossAppRedirects="true"></forms> 
     </authentication> 
     <authorization> 

Eh bien, c'est une ll. Malheureusement, cela ne fonctionne pas.

S'il vous plaît, ne faites pas attention à queryStringToIndicateUrlPage, c'est seulement une solution de contournement simple afin de savoir si je dois rediriger sur la même application ou sur l'autre.

Répondre

0

Comme vous utilisez l'authentification basée sur des cookies partagé entre deux domaines, vous devez indiquer dans l'élément <forms>:

<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES"/> 
    <authentication mode="Forms"> 
     <forms domain=".domain.com" ... /> 
    </authentication> 

Notez la première « » devant le nom de domaine, ce qui permet le partage de cookies entre sous-domaines.

+0

J'ai déjà essayé en spécifiant le nom de domaine, mais cela ne fonctionne pas de toute façon. – bit

+0

@bit: Votre exemple de code utilise authCookie.Domain = "myDomain.com", il devrait être ".myDomain.com". Avez-vous essayé cela? – Ruben

+0

Oui, je l'ai fait. J'ai essayé aussi beaucoup d'autres solutions sans la chance .. Il semble impossible à réaliser. – bit