Frage

Ich habe eine Haupt-Asp.net-App, die in Asp.net 1.1 geschrieben ist.Unter der Anwendung laufen mehrere 2.0-Apps.Um einen Benutzer vollständig abzumelden, kann ich mich einfach mit FormsAuthentication.SignOut von der 1.1-App abmelden, oder ist das komplizierter?

War es hilfreich?

Lösung

Was Sie zu tun suchen, um Single Sign On und Single Sign Off genannt wird. Es gibt Unterschiede auf, wie Sie die Anwendungen einrichten. Ich werde versuchen zu klären, wo diese Unterschiede ins Spiel kommen.

Um Single Sign-On und Single-Sign zu implementieren off müssen Sie den Cookie-Namen, den Schutz zu machen, und Pfad-Attribute die gleichen zwischen allen Anwendungen.

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

Als nächstes müssen Sie die Maschine Schlüssel addieren und sie müssen die gleiche zwischen allen Anwendungen sein.

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

Sind Sie mit zweiten oder dritten Level-Domains für die Anwendungen? Wenn dies der Fall müssen Sie, indem Sie die Domain auf den Cookie ein bisschen mehr tun:

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);
}

Jetzt Single Sign off, ruft FormsAuthentication.SignOut möglicherweise nicht genug zu tun. Die nächste beste Sache ist die Cookie-Ablauf auf ein vergangenes Datum einzustellen. Dadurch wird sichergestellt, dass das Cookie nicht noch einmal für die Authentifizierung verwendet werden.

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);
}

Ich bin unter Berücksichtigung Sie die gleiche Datenbank für alle Anwendungen verwenden. Wenn die Anwendungen eine separate Datenbank für die Registrierung und Authentifizierung verwenden, dann müssen wir etwas mehr tun. Lassen Sie mich einfach wissen, ob dies der Fall ist. Ansonsten sollte dies für Sie arbeiten.

Andere Tipps

Es könnte einfacher sein, wenn Sie einen zentralen Session-Speicher für alle Ihre Anwendungen haben, werden. Anschließend können Sie die Sitzung festgelegt in einem Ort auf null.

Das funktioniert für mich:

In dem Logout-Ereignisse statt FormsAuthentication.GetAuthCookie Methode verwendet Cookies Sammlung in Request-Objekt wie folgt:

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

Ofcourse erfordert dies u den Cookie-Namen der Website kennen (s), die Sie der Benutzer abgemeldet werden -. Was aber kein Problem sein, wenn Sie das gleiche Cookie über alle Web-Anwendungen verwenden

Ich ziehe web.config verwenden

<authentication mode="Forms">
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top