web-dev-qa-db-ja.com

ASP.NET Windows認証ログアウト

このweb.configのようなASP.NETでWindows認証を使用する場合、どのようにログアウトしますか?

<authentication mode="Windows" />

私はすでに次のことに失敗しました。リダイレクトしますが、ユーザーはログアウトしません。

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

背景情報:

ローカルファイルにアクセスするには、Active Directoryを使用してIDを偽装する必要があるため、Windows認証を使用する必要があります。そして、フォーム認証を使用して偽装することはできません。なぜならHttpContext.Current.User.IdentityWindowsIdentityにはなりません。 フォーム認証を使用して偽装する

47
Robert

「Windows」認証を使用している場合、サーバー側のログアウトボタンは機能しません。ログアウトボタンが必要な場合は「フォーム」認証を使用するか、ユーザーのブラウザを閉じる必要があります。

33
Robert

IEブラウザのみの場合、Windows認証を使用している場合は、次のJavaScriptを使用してユーザーをログアウトできます。(注:ブラウザを閉じる必要はありませんが、ユーザーはIE以外のブラウザを使用している可能性があります)。

ユーザーが「いいえ」をクリックしてブラウザを閉じた場合、認証が必要なサイトのページにアクセスしようとすると、ユーザー名/パスワードの入力を求められます。

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

このコードは、SharePointのSignout.aspxページから取得されました。

22
Garry English

Windows認証は、Windows認証トークンを渡すことでIISレベルで機能します。認証はIISレベルで発生するため、実際にアプリケーションコードからログアウトすることはできません。問題への答えがあるようです here 。これは2番目の質問であり、基本的にフォーム認証とLogonUser Windows APIの使用を伴います。

12
tribus

Windows認証を使用したSharePointアプリケーションがあり、15分後に自動ログアウトが必要でした。私はいくつかのコードを混同し、これが結果です。 IEで正しく動作します。

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

これらのコードをマスターページに配置すると、アイドル時間の15分後にログインページが表示されます。これが誰かを助けることを願って

6
Eric

IEでログインしているすべてのものからログアウトしますが、IEとFirefoxの両方でJavaScriptを使用してこれを動作させています。Safariでは動作しますが、Safariはフィッシング警告をスローします。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

これに多くのトラブルがありましたが、機能するコードを以下に示します。

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

私が見た最高の答えは、関連するStackOverFlowの質問にあります。

IEのClearAuthenticationCacheと同等のブラウザはありますか?

そして

HTTP基本認証を使用する場合のユーザーのログアウト

基本的に、AJAXリクエストを無効な認証情報でサーバーに送信し、サーバーにそれらを受け入れさせる必要があります。

1
AnthonyVO