Question

J'ai un principal asp.net app, ce qui est écrit dans asp.net 1.1.Marche sous l'application de plusieurs 2.0 apps.Complètement déconnecter un utilisateur peut je viens de vous déconnecter de l'application 1.1 avec FormsAuthentication.SignOut ou est-ce plus compliqué que cela?

Était-ce utile?

La solution

Ce que tu cherches à faire s'appelle de la connexion Unique et Simple de la faire Signer.Il y a des différences en fonction de comment vous avez les applications.Je vais essayer de préciser où ces différences entrent en jeu.

Pour mettre en œuvre l'authentification unique et de single sign off, vous devez mettre le nom du cookie, la protection, et le chemin d'accès attribue le même entre toutes les applications.

<authentication mode="Forms">
    <forms name=".cookiename"
           loginUrl="~/Login.aspx" 
           timeout="30" 
           path="/" />
</authentication>

Ensuite, vous devez ajouter les clés de machine et ils doivent être la même entre toutes vos applications.

<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902"
            encryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC"
            validation="SHA1" />

Êtes-vous à l'aide de deuxième ou de troisième niveau des domaines pour les applications?Si oui, vous aurez besoin de faire un peu plus en ajoutant le domaine du cookie:

protected void Login(string userName, string password)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(30);
    Response.AppendCookie(cookie);
}

Maintenant, pour faire de l'authentification unique arrêt, en appelant FormsAuthentication.SignOut peut-être pas assez.La meilleure chose à faire est de définir le cookie d'expiration à une date passée.Cela permettra d'assurer que le cookie ne sera plus utilisé pour l'authentification.

protected void Logout(string userName)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(-1);
    Response.AppendCookie(cookie);
}

Je prends en considération que vous êtes en utilisant la même base de données pour toutes les applications.Si les applications utilisent une base de données distincte pour l'enregistrement et l'authentification, puis nous aurons besoin de faire un peu plus.Permettez-moi juste de savoir si c'est le cas.Sinon, cela devrait fonctionner pour vous.

Autres conseils

Il pourrait être plus facile si vous avez une centrale session magasin pour toutes vos applications.Vous pouvez ensuite définir la session null dans un seul endroit.

Cela a fonctionné pour moi:

Dans le cas de Déconnexion, au lieu de FormsAuthentication.GetAuthCookie utilisation d'une méthode de collection de Cookies dans l'objet de Requête ci-dessous:

HttpCookie cookie = Request.Cookies.Get(otherSiteCookieName);
cookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(cookie);

Bien sûr, cela nécessite u connais pas le nom du Cookie du site(s) vous souhaitez que l'utilisateur connecté - qui, cependant, ne sera pas un problème si vous utilisez le même cookie dans tous les web apps.

Je préfère utiliser le web.config

<authentication mode="Forms">
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top