この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.Identity
はWindowsIdentity
にはなりません。 フォーム認証を使用して偽装する
「Windows」認証を使用している場合、サーバー側のログアウトボタンは機能しません。ログアウトボタンが必要な場合は「フォーム」認証を使用するか、ユーザーのブラウザを閉じる必要があります。
IEブラウザのみの場合、Windows認証を使用している場合は、次のJavaScriptを使用してユーザーをログアウトできます。(注:ブラウザを閉じる必要はありませんが、ユーザーはIE以外のブラウザを使用している可能性があります)。
ユーザーが「いいえ」をクリックしてブラウザを閉じた場合、認証が必要なサイトのページにアクセスしようとすると、ユーザー名/パスワードの入力を求められます。
try {
document.execCommand("ClearAuthenticationCache");
}
catch (e) { }
window.close();
このコードは、SharePointのSignout.aspxページから取得されました。
Windows認証は、Windows認証トークンを渡すことでIISレベルで機能します。認証はIISレベルで発生するため、実際にアプリケーションコードからログアウトすることはできません。問題への答えがあるようです here 。これは2番目の質問であり、基本的にフォーム認証とLogonUser Windows APIの使用を伴います。
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分後にログインページが表示されます。これが誰かを助けることを願って
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();
}
これに多くのトラブルがありましたが、機能するコードを以下に示します。
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");
私が見た最高の答えは、関連するStackOverFlowの質問にあります。
IEのClearAuthenticationCacheと同等のブラウザはありますか?
そして
基本的に、AJAXリクエストを無効な認証情報でサーバーに送信し、サーバーにそれらを受け入れさせる必要があります。