ASP.NET Windows認証ログアウト
-
21-08-2019 - |
質問
どのようにしてログアウトしますか?
<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.Identity
はWindowsIdentity
されませんので、私は、フォーム認証を使用して偽装することはできません。
フォーム認証を使用して偽装する
解決
いいえ、サーバー側のログアウトボタンは動作しません。あなたはログアウトボタンをしたい場合は、「フォーム」の認証を使用するか、ユーザーのブラウザを閉じる必要があります。
他のヒント
のみ IEブラウザは、Windows認証を使用している場合は、ユーザーをログアウトするには、以下のJavaScriptを使用することができるため。 (注:ユーザーがIE以外のブラウザを使用している場合がありますので、ブラウザを閉じて必要ですが、推奨されません)
。 ユーザーがブラウザを閉じるには、「いいえ」をクリックすると、彼らは認証が必要なサイトのページにアクセスしようとすると、、その後、ユーザーは、ユーザー名/パスワードの入力を求められます。
try {
document.execCommand("ClearAuthenticationCache");
}
catch (e) { }
window.close();
このコードは、SharePointのSignout.aspxページから取られました。
Windows認証は、Windows認証トークンを渡すことによってIISレベルで動作します。認証はIISのレベルで発生するので、あなたは、実際にアプリケーションコードからログアウトすることはできません。しかし、ここで問題への答えがあるように思われます>。これは、2番目の質問に対処して、基本的にフォーム認証とのLogonUserのWindows APIを使用する必要がある。
私は15分後に自動ログアウトを必要とし、Windows認証とSharePointアプリケーションを持っていました。私はいくつかのコードを混合し、ここでの結果です。それが適切に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分のアイドル時間が経過した後、ログインページが表示されます、あなたのマスターページにこれらのコードを入れました。 願ってこのヘルプ誰か
私は、IEとFirefoxの両方でJavaScriptを使用してこの作業を持っています。それは一種のSafariで動作しますが、Safariはフィッシング警告をスローします。オペラでは動作しません。
try {
if (document.all)
{
document.execCommand("ClearAuthenticationCache");
window.location = "/";
}
else
{
window.location = "http://logout:logout@example.com";
}
}
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();
}
私が見た中で最高の答えは、関連StackOverflowの質問にあります:
IEのClearAuthenticationCacheと同等のブラウザはありますか? の
と
基本的には、無効な資格情報を使用してサーバーにAJAX要求を送信し、サーバーがそれらを受け入れている必要があります。
このとのトラブルの多くを持っていた、以下の動作するコードは、あるうまくいけば誰かが重宝します。
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");