web-dev-qa-db-fra.com

Déconnexion de l'authentification Windows ASP.NET

Comment vous déconnectez-vous lorsque vous utilisez l'authentification Windows dans ASP.NET comme ce web.config?

<authentication mode="Windows" />

J'ai déjà essayé ce qui suit sans succès. Il redirige, mais ne déconnecte pas l'utilisateur.

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

Informations de fond:

Je dois utiliser l'authentification Windows car je dois usurper l'identité à l'aide d'Active Directory pour accéder aux fichiers locaux. Et je ne peux pas me faire passer pour l'authentification par formulaire, car le HttpContext.Current.User.Identity ne sera pas un WindowsIdentity. Emprunter l'identité en utilisant l'authentification par formulaire

47
Robert

Aucun bouton de déconnexion côté serveur ne fonctionnera lors de l'utilisation de l'authentification "Windows". Vous devez utiliser l'authentification "Formulaires" si vous voulez un bouton de déconnexion, ou fermez le navigateur de l'utilisateur.

33
Robert

Pour IE uniquement, vous pouvez utiliser le javascript suivant pour déconnecter l'utilisateur si vous utilisez l'authentification Windows. (Remarque: la fermeture du navigateur n'est pas nécessaire, mais recommandée car l'utilisateur peut utiliser un navigateur non IE).

Si l'utilisateur clique sur "Non" pour fermer le navigateur, il sera invité à entrer un nom d'utilisateur/mot de passe s'il tente d'accéder à une page du site qui nécessite une authentification.

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

Ce code provient de la page Signout.aspx de SharePoint.

22
Garry English

L'authentification Windows fonctionne au niveau IIS en transmettant votre jeton d'authentification Windows. Étant donné que l'authentification se produit au niveau IIS, vous ne pouvez pas réellement vous déconnecter du code d'application. Cependant, il semble y avoir une réponse à votre problème ici . C'est la deuxième question abordée et implique essentiellement l'utilisation de l'authentification par formulaire et de l'API LogonUser Windows.

12
tribus

J'avais une application SharePoint avec authentification Windows, j'avais besoin d'une déconnexion automatique après 15 minutes. J'ai mélangé quelques codes et voici le résultat. cela fonctionne dans IE correctement.

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

mettez ces codes dans votre page maître, après 15 minutes d'inactivité, vous verrez la page de connexion. j'espère que cela aide quelqu'un

6
Eric

J'ai ce travail en utilisant JavaScript dans les deux IE et Firefox, bien qu'il vous déconnecte de tout ce que vous êtes connecté dans IE. Cela fonctionne en quelque sorte dans Safari, mais Safari lance un avertissement de phishing Ne fonctionne pas dans 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(); 
    } 
3
Scott

J'ai eu beaucoup de problèmes avec cela, voici le code qui fonctionne, j'espère que quelqu'un le trouvera utile.

foreach (var cookie in Request.Cookies.Keys)
{
    Response.Cookies.Delete(cookie);
}


await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);


Response.Cookies.Append("EdgeAccessCookie", "", new Microsoft.AspNetCore.Http.CookieOptions()
{
    Path = "/",
    HttpOnly = true,
    SameSite = SameSiteMode.Lax, Expires = DateTime.Now.AddDays(-1)
});


Response.Redirect("https://adfs.[sitename].com/adfs/ls?wa=wsignout1.0");
1
Trent Stewart

Les meilleures réponses que j'ai vues se trouvent dans les questions StackOverFlow connexes:

Existe-t-il un navigateur équivalent à ClearAuthenticationCache d'IE?

et

Déconnexion d'un utilisateur lors de l'utilisation de l'authentification HTTP de base

Fondamentalement, vous devez envoyer une demande AJAX au serveur avec des informations d'identification non valides et le faire accepter par le serveur.

1
AnthonyVO