Ich habe eine asp.net Hauptanwendung, die in asp.net 1.1 geschrieben wird. Unterhalb der Anwendung laufen mehrere 2.0 Apps. Um mich vollständig abzumelden, kann ich mich einfach mit FormsAuthentication.SignOut von der 1.1 App abmelden oder ist das komplizierter?Wie kann ich mich von mehreren asp.net-Anwendungen abmelden?
Antwort
Was Sie suchen, heißt Single Sign On und Single Sign Off. Je nachdem, wie Sie die Anwendungen eingerichtet haben, gibt es Unterschiede. Ich werde versuchen zu klären, wo diese Unterschiede ins Spiel kommen.
Um Single Sign On und Single Sign Off zu implementieren, müssen Sie den Cookie-Namen, den Schutz und die Pfadattribute für alle Anwendungen identisch machen.
<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 das gleiche zwischen allen Anwendungen sein.
<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902"
encryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC"
validation="SHA1" />
Verwenden Sie Domänen der zweiten oder dritten Ebene 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 zu tun, rufen FormsAuthentication.SignOut kann nicht genug sein. Die nächste beste Sache ist, den Cookie Ablauf auf ein vergangenes Datum zu setzen. Dadurch wird sichergestellt, dass der Cookie nicht erneut zur Authentifizierung verwendet wird.
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 denke, Sie verwenden die gleiche Datenbank für alle Anwendungen. Wenn die Anwendungen eine separate Datenbank für die Registrierung und Authentifizierung verwenden, müssen wir noch mehr tun. Lass es mich wissen, wenn das der Fall ist. Ansonsten sollte dies für Sie funktionieren.
Es könnte einfacher sein, wenn Sie einen zentralen Sitzungsspeicher für alle Ihre Anwendungen haben. Sie können die Sitzung dann an einer Stelle auf null setzen.
Das ist für mich gearbeitet:
Im 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 kennt die Website (s), auf denen der Benutzer abgemeldet werden soll - dies ist jedoch kein Problem, wenn Sie dasselbe Cookie für alle Webanwendungen verwenden.
Ich ziehe web.config
<authentication mode="Forms">
<forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
verwenden „Jetzt zu tun Single-Sign aus, genug kann nicht sein FormsAuthentication.SignOut Aufruf“ Können Sie angeben, warum dies nicht ausreichen würde? –
Abmelden sollte sich nicht auf die andere Domäne auswirken. Wie erreiche ich das? https://stackoverflow.com/questions/45612337/form-authentication-sign-out-should-not-affe-the-other-domain?noredirect=1#45612337 –