1

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">
.
. 
.
4

3 に答える 3

0

SetExpires と DateTime.Now のみを使用しました。これにより、ローカルサーバーの時刻が Cookie に一致します。DateTime.UtcNow.Addminutes(-1) を使用すると、ここで本当の犯人になる可能性があります。

また、フォーム認証を使用している場合は、への呼び出しが表示されません

FormsAuthentication.SignOut();
于 2013-01-20T14:05:47.697 に答える
0

ActionResultコントローラでセキュア ページを返すメソッドに次の属性を追加すると、機能するはずです。

public class MyControllerForAuthorizedStuff
{
    [OutputCache(NoStore = true, Duration = 0, Location = OutputCacheLocation.None)]
    public ActionResult Index()
    {
        return View();
    }
} 
于 2014-04-08T15:04:18.003 に答える