ASP.Net MVC 4 を使用してログイン/ログアウト機能を作成しました。Active Directory に対してユーザーを認証するために、独自に作成したフォームを使用しました。機能的には問題なく動作しています。
それでもセキュリティには大きな問題があります。ユーザーがログアウト リンクをクリックすると、正常にログアウトされ、ログイン フォームに再度リダイレクトされます。コントローラーのコードは次のようになります。
public ActionResult Logout()
{
// Tried to include below 3 lines in _Layout.cshtml as well. But not identifying.
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Session.Abandon();
return RedirectToAction("Login");
}
ただし、ブラウザの戻るボタンをクリックすると、ユーザーは他のページに戻ってページを移動できます。
私はいくつかの解決策、さまざまなアプローチを試しましたが、うまくいきませんでした。MVC のアプローチは、ASP.NET フォームとは大きく異なるようです。これについてあなたの助けに感謝します。
(私はC#/ MVCの方法を使用してこれを解決しようとしています。ログアウト時にブラウザを無効にする/閉じるためにJavaScriptを使用していません。)
更新:コード断片
[HttpPost]
public ActionResult Login(LoginModel authUser)
{
// Call Helper to get LDAP info. Will return username with groups or null
UserModel userProfile = LdapLoginHelper.AuthenticateUser(authUser);
if (userProfile != null)
{
Session["UserName"] = userProfile.UserName;
Session["LdapGroups"] = userProfile.LdapGroups;
if (userProfile.LdapGroups.Contains("Administrators"))
{
// To be implemented
}
else
{
// To be implemented
}
// Successful login. Redirect to main page
return RedirectToAction("Home", "Home");
}
else
{
// Invalid Login. Redirect to Login page
return RedirectToAction("Login");
}
}
public ActionResult Logout()
{
// Not worked
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Session.Abandon();
/// Tried this too. Not worked.
/// Session.Clear();
/// FormsAuthentication.SignOut();
//// Tried this also. Not worked.
//// WebSecurity.Logout();
return RedirectToAction("Login");
}
この一般的な _Layout.cshtml ページ ヘッダーに加えて、次のようになります。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
.
.
.