我有一个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";
我希望我能解释原因,但这似乎已经解决了。