asp.net登录成功,但IsAuthenticated为false

asp.net登录成功,但IsAuthenticated为false,asp.net,security,login,owin,Asp.net,Security,Login,Owin,我有一个使用ASP.NET附带的安全性的ASP 5应用程序,它使用Microsoft.AspNet.Identity和Owin以及System.Web.security。我有一个严重的登录问题,这将阻止我的网站公开-成功的登录有时不起作用。去年夏天,该网站被我的敏捷俱乐部私自使用,出现了登录问题 当问题发生时,成功登录的用户将被重定向到另一个网页,并且在页面加载中成功登录的下一页的代码中,HttpContext.Current.user.Identity.IsAuthenticated为fals

我有一个使用ASP.NET附带的安全性的ASP 5应用程序,它使用Microsoft.AspNet.Identity和Owin以及System.Web.security。我有一个严重的登录问题,这将阻止我的网站公开-成功的登录有时不起作用。去年夏天,该网站被我的敏捷俱乐部私自使用,出现了登录问题

当问题发生时,成功登录的用户将被重定向到另一个网页,并且在页面加载中成功登录的下一页的代码中,HttpContext.Current.user.Identity.IsAuthenticated为false,而不是通常的和预期的true,这会导致登录由于返回而看起来什么都不做。我有两个不同场景的登录页面,其中一个页面比另一个页面工作得更好,尽管代码是相同的,只是有些逻辑决定下一个页面与登录无关。更好的组登录页面与工作更少的页面进入同一页面。登录可能有效,也可能无效,一旦失败,它将在同一登录页面上继续失败

来自登录按钮回调的代码在两个主登录中是相同的

 protected void LogIn(object sender, EventArgs e)
 {
    if (IsValid) {

        // Validate the user password
        var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();

        string password = Password.Text;
        if (Helper.IsEmpty(password)) {
            password = OrgGroup.DEFAULT_PASSWORD;
        }

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

        switch (result)
        {
            case SignInStatus.Success:
                ApplicationUser user = signinManager.UserManager.FindByName(LoginEmail.Text);
                if (RememberMe.Checked)  {
                    SignUpPlace.RememberMe(Response, LoginEmail.Text);
                }
                FormsAuthentication.SetAuthCookie(user.UserName, true);

                if (user.GroupId.Equals(Guid.Empty)) {
                    Response.Redirect("/Home"); 
                }
                else {
                    Response.Redirect("/Member/" + user.GroupId.ToString()); 
                }
                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;
        }
    }
 }
Web配置已完成

<system.web>
  <authentication mode="None" />
...
<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true">
  <remove name="FormsAuthentication" />
 ...

...
...
我有几个更注重技术的用户告诉我他们可以使用的两个登录(public和member)的登录失败和成功。更多luddite类型的用户只是认为什么都不管用。请记住,我似乎工作良好,这有助于避免登录及其问题

我设法在我的开发系统上重现了这个问题,有几次我确定IsAuthenticated是错误的,这让我陷入了死胡同,不明白成功登录如何在重定向中转换为IsAuthenticated。在线搜索并没有帮助我理解微软安全的黑匣子

有人知道什么会导致成功登录后IsAuthenticated为false吗?
如果它在我的开发过程中再次出现,有什么我应该看的吗?
使用提供的安全工具是错误的吗?他们提供我所需要的一切


我不能让成功登录随机失败

该代码混合了Owin身份验证和表单身份验证。混合使用这两者的原因是什么?使用FormsAuthentication是我唯一能找到的延长cookie过期日期以记住登录名的方法。这似乎是可行的,但我很高兴改变它,如果我可以指出不同的Owin解决方案。两者之间的界线非常混乱。web配置未启用表单身份验证。该代码与Owin身份验证和表单身份验证混合使用。混合使用这两者的原因是什么?使用FormsAuthentication是我唯一能找到的延长cookie过期日期以记住登录名的方法。这似乎是可行的,但我很高兴改变它,如果我可以指出不同的Owin解决方案。两者之间的界线非常混乱。web配置未启用窗体身份验证。
<system.web>
  <authentication mode="None" />
...
<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true">
  <remove name="FormsAuthentication" />
 ...