Question

Est-il possible d'authentifier les utilisateurs de plusieurs sous-domaines lorsque l'authentification a lieu dans un sous-domaine plutôt que dans le domaine parent?

Par exemple:

L'utilisateur se connecte à site1.parent.com, puis nous devons l'envoyer à reporting.parent.com.

Puis-je les authentifier sur le site de rapport même si la connexion a eu lieu dans un sous-domaine?

Jusqu'à présent, toutes les recherches que j'ai effectuées impliquaient que les utilisateurs se connectent d'abord au domaine parent, puis que chaque sous-domaine ait accès au cookie d'authentification.

Était-ce utile?

La solution

Vous pouvez définir le cookie comme étant le domaine parent au moment de l'authentification, mais vous devez le définir explicitement. Le domaine complet par défaut sera celui par défaut.

Une fois que le cookie d'authentification est correctement défini sur le domaine parent, tous les sous-domaines devraient pouvoir le lire.

Autres conseils

Lorsque vous authentifiez l'utilisateur, définissez le domaine du cookie d'authentification sur le domaine de second niveau, c'est-à-dire parent.com. Chaque sous-domaine recevra les cookies du domaine parent sur demande. Une authentification sur chacun d'entre eux est donc possible car vous disposerez d'un cookie d'authentification partagé.

Code d'authentification:

System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False);
authcookie.Domain = "parent.com";
HttpResponse.AppendCookie(authcookie);
HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName, 
                                                                       False));

En remarque, j’ai constaté qu’après avoir utilisé la méthode de jro qui fonctionnait bien +1, la méthode FormsAuthenication.SignOut () ne fonctionnait pas lorsqu’elle était appelée depuis un sous-domaine autre que www /. (Je suppose que la propriété .Domain ne correspond pas) - Pour éviter cela, j'ai utilisé:

if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
            {
                HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
                myCookie.Domain = "parent.com";
                myCookie.Expires = DateTime.Now.AddDays(-1d);
                Response.Cookies.Add(myCookie);
            }

En plus de définir un cookie dans le domaine parent, vous devez également vous assurer que tous les sites (applications) ont les mêmes clés validationKey et decryptionKey (), de manière à reconnaître le ticket d'authentification et le cookie de chacun. Très bon article ici http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

Oui, bien sûr. Vous devrez peut-être rouler vous-même à certaines étapes, mais cela devrait être faisable.

Une idée: lorsque vous les redirigez au-delà de la limite, attribuez-leur un jeton de passe unique, puis dites au sous-domaine de réception de les attendre (cet utilisateur, à partir de cette adresse IP, avec ce jeton).

La réponse de Jro fonctionne bien. Veillez toutefois à mettre à jour le paramètre d'authentification de formulaires Webconfig "domaine" et . , sinon la déconnexion de l'authentification par formulaires ne fonctionnera pas correctement. Voici le problème de fermeture de session que je suis venu à travers. Trick ici est d'avoir un '.' le préfixe correspondant au domaine est défini pour le cookie sous la forme " .parent.com " (utilisez un inspecteur de cookies).

<authentication mode="Forms">          
      <forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com"  name="FormAuthentication" path="/"/>
    </authentication>

2 choses à faire:

  1. MachineKey doit être identique dans tous les web.config (domaine principal et sous-domaine (s))
  2. Le nom de domaine AuthenticationCookie doit être identique.

Suivez les comme suit article pour plus de profondeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top