2009-07-01 2 views
43

Wie melden Sie sich ab, wenn Sie die Windows-Authentifizierung in ASP.NET wie dieser web.config verwenden?ASP.NET Windows Authentifizierungsabmeldung

<authentication mode="Windows" /> 

Ich habe bereits folgende erfolglos versucht. Es leitet weiter, loggt den Benutzer jedoch nicht aus.

void logoutButton_Click(object sender, EventArgs e) { 
    HttpContext.Current.Session.Clear(); 
    HttpContext.Current.Session.Abandon(); 
    ViewState.Clear(); 
    FormsAuthentication.SignOut(); 
    Response.Redirect("/"); 
} 

Hintergrund Info:

Ich habe Windows-Authentifizierung verwenden, weil ich die Identität mithilfe von Active Directory zum Imitieren benötigen Zugriff auf lokale Dateien zu gewinnen. Und ich kann nicht annehmen, die Formularauthentifizierung zu verwenden, da das HttpContext.Current.User.Identity kein WindowsIdentity sein wird. Impersonate using Forms Authentication

+0

Es scheint, als ob die Identität eines Benutzers über Forms Authentifizierung schließlich möglich ist. Siehe http://Stackoverflow.com/a/11873754/359765 – bgh

Antwort

29

Keine serverseitige Abmelde-Schaltfläche funktioniert, wenn "Windows" -Authentifizierung verwendet wird. Sie müssen die "Forms" -Authentifizierung verwenden, wenn Sie eine Abmelde-Schaltfläche wünschen, oder den Browser des Benutzers schließen.

11

Die Windows-Authentifizierung funktioniert auf der IIS-Ebene, indem Sie Ihr Windows-Authentifizierungstoken übergeben. Da die Authentifizierung auf der IIS-Ebene erfolgt, können Sie sich nicht wirklich vom Anwendungscode abmelden. Es scheint jedoch eine Lösung für Ihr Problem zu geben here. Es ist die zweite Frage adressiert und im Wesentlichen umfasst die Verwendung der Formularauthentifizierung und der LogonUser Windows API.

+0

Super! Danke für den Link zu diesem Artikel. Genau das, was ich für meine andere Frage wollte. Bitte posten Sie das zu meiner anderen Frage und ich werde Sie als beantwortet beantworten. – Robert

20

Für IE-Browser nur können Sie das folgende Javascript verwenden, um den Benutzer abzumelden, wenn Sie Windows-Authentifizierung verwenden. (Hinweis: Das Schließen des Browsers ist nicht erforderlich, wird aber empfohlen, da der Benutzer möglicherweise einen Browser verwendet, der kein IE-Browser ist).

Wenn der Benutzer auf "Nein" klickt, um den Browser zu schließen, wird der Benutzer zur Eingabe eines Benutzernamens/Kennworts aufgefordert, wenn er versucht, auf eine Seite auf der Website zuzugreifen, die eine Authentifizierung erfordert.

try { 
    document.execCommand("ClearAuthenticationCache"); 
} 
catch (e) { } 
window.close(); 

Dieser Code wurde von Sharepoint Signout.aspx Seite genommen.

+0

Brilliant! Ich hatte gehofft, dass dies eine Ausnahme in Nicht-IE-Browsern verursachen würde, so dass wir im catch-Block eine Warnung an Nicht-IE-Benutzer mit weiteren Anweisungen anzeigen könnten. Es gibt eine Ausnahme in FF, aber leider nicht in Chrome. Wäre es also genug, das Fenster zu schließen? Nicht sicher. Schnelltests schlagen vor, dass es in Chrome und FF sein könnte, aber ich weiß sicher, dass mit IE (ohne das obige Skript) alle Fenster geschlossen werden müssen, bevor die Authentifizierung gelöscht wird. –

+1

Es ist auch erwähnenswert, dass nach diesem Link der obige Befehl löscht alle Authentifizierungsdaten nicht nur für die Website, die es angefordert http://msdn.microsoft.com/en-us/library/ms536979.aspx –

+0

Brilliant! Ich habe den Code so umgestellt, dass er wie hier beschrieben umgeleitet wird - http://stackoverflow.com/questions/12742319/formsauthentication-signout-not-working-for-iis-windows-authentication-op – Jack

3

Ich habe dies funktioniert mit JavaScript in IE und Firefox, obwohl es Sie aus allem protokolliert Sie in IE angemeldet sind. Es funktioniert in Safari, aber Safari gibt eine Phishing-Warnung aus. Funktioniert nicht in Opera.

 
    try { 
     if (document.all) 
     { 
      document.execCommand("ClearAuthenticationCache"); 
      window.location = "/"; 
     } 
     else 
     { 
      window.location = "http://logout:[email protected]"; 
     } 
    } 
    catch(e) 
    { 
     alert("It was not possible to clear your credentials from browser cache. Please, close your browser window to ensure that you are completely logout of system."); 
     self.close(); 
    } 

6

Ich hatte eine SharePoint-Anwendung mit Windows-Authentifizierung, ich brauchte automatische Abmeldung nach 15 Minuten. Ich habe einige Codes durcheinander gebracht und hier ist das Ergebnis. Es funktioniert in IE richtig.

<script type="text/javascript"> 
var t; 
window.onload = resetTimer; 
document.onmousemove = resetTimer; 
document.onkeypress = resetTimer; 

function logout() { 

    try { 
     document.execCommand("ClearAuthenticationCache"); 
     window.location.href = window.location.protocol.replace(/\:/g, '') + "://" + window.location.host + "/_layouts/customlogin14.aspx"; 
    } 
    catch (e) { } 

} 

function resetTimer() { 
    window.clearTimeout(t); 
    t = window.setTimeout(logout, 900000); 
} 

setzen diese Codes in der Masterseite, nach 15 Minuten Leerlaufzeit Sie die Login-Seite sehen. hoffe, diese Hilfe jemand