发布网站后,Asp.Net Web窗体角色身份验证会停止工作几分钟

时间:2016-07-27 18:26:25

标签: c# asp.net webforms

我有一个Asp Web Forms网站,它使用Microsoft.AspNet.Identity.Owin 2.2.1版来管理用户和角色。 default.aspx页面仅允许角色" Lab,Admin,LabSupervisor"。当用户通过login.aspx页面登录时,如果用户的角色是允许的3个角色之一,则会重定向到default.aspx页面。这是问题...在我发布网站后,这个角色认证工作5或10分钟。在此之后,用户将无法再登录,即使用户'角色是对的。用户停止工作后,尝试登录,页面停留在登录页面上,永远不会重定向到默认页面。如果我希望身份验证再次运行,我通常可以重新发布web.config页面,身份验证将再工作几分钟。我很难过。

所以我的最新理论是我的web.config文件正在变得腐败。我发现如果我删除我的web.config文件并重新发布它,该网站将工作一段时间,然后再次停止工作。这是我的代码,允许我提到的3个角色并拒绝所有其他用户。

我的web.config文件中的代码段:

<configuration>
  <location path="default.aspx">
    <system.web>
      <authorization>
        <allow roles="Lab, Admin, LabSupervisor"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

我的login.aspx代码隐藏页面中的代码:

protected void LogIn(object sender, EventArgs e)
        {
            if (IsValid)
            {
                // Validate the user password
                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
                var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();

                // This doen't count login failures towards account lockout
                // To enable password failures to trigger lockout, change to shouldLockout: true
                var result = signinManager.PasswordSignIn(UserName.Text, Password.Text, RememberMe.Checked, shouldLockout: false);

                switch (result)
                {
                    case SignInStatus.Success:
                        IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);

                        break;
                    case SignInStatus.LockedOut:
                        Response.Redirect("/Account/Lockout");
                        break;
                    case SignInStatus.RequiresVerification:
                        Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}", 
                                                        Request.QueryString["ReturnUrl"],
                                                        RememberMe.Checked),
                                          true);
                        break;
                    case SignInStatus.Failure:
                    default:
                        FailureText.Text = "Invalid login attempt";
                        ErrorMessage.Visible = true;
                        break;
                }
            }
        }

还有一个线索......我使用SmarterAsp.Net托管这个网站。当登录页面停止验证并重定向到默认页面时,我发现我可以登录我的SmarterAsp.Net帐户并单击“修复ACL&#34;按钮,这让一切都恢复正常。无需重新加载web.config文件,无论如何都无法解决问题。但出于某种原因,这个&#34;修复ACL&#34;按钮每次都有效。我已根据下面的这篇文章调整了我的项目文件,但它并没有什么不同。 http://www.smarterasp.net/support/kb/a9/acl-was-altered-after-using-vs-web-deploy.aspx

解决!

我几个月前就想到这一点,但忘了发布解决方案。事实证明,这是一个cookie问题。我在登录页面上将以下代码添加到了我的Page_Load事件中,并解决了这个问题。

Session["DummySession"] = "DummySession"; 

我希望我能解释原因,但这似乎已经解决了。

0 个答案:

没有答案