WebForms表单身份验证:成功登录和重定向后,Request.IsAuthenticated = false

时间:2016-05-16 13:57:39

标签: c# asp.net webforms forms-authentication

我今天的WebForms日真的很糟糕!

我有一个使用Forms身份验证的成熟WebForms Web应用程序。由于某些未知原因,我的应用程序已开始显示Request.IsAuthenticated(在Application_BeginRequest中的Global.asax函数),尽管进入登录页面,成功登录并调用FormsAuthentication.RedirectFromLoginPage()。< / p>

我无法弄清楚出了什么问题。以下是我所做的检查。我希望有人可能会指出我在这里没有检查过的东西:

  1. web.config的身份验证部分如下:

    <authentication mode="Forms">
        <forms loginUrl="~/Login" timeout="120" cookieless="UseCookies" defaultUrl="~/ExitPoint.aspx?Page=Home" />
    </authentication>
    
  2. web.config的授权部分如下:

    <authorization>
        <deny users="?" />
        <allow users="*" />
    </authorization>
    
  3. 对于登录/退出等网页,我有:

    <location path="Login">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
    </location>
    
  4. 登录时,我已通过身份验证并逐步完成身份验证过程。结束时:

    FormsAuthentication.RedirectFromLoginPage(userID, createPersistentCookie: true); 
    // Includes call to SetAuthCookie()
    
  5. 其中userID是字符串值“768”。

    1. 下次请求时,我的浏览器会显示加密的会话Cookie:

      Name=.ASPXAUTH
      Value=FFC592.....
      Expires=2016-05-16T15:41:58.817Z (basically "now"+1 hour)
      Path=/
      Domain=localhost
      HTTP=Yes
      Secure=(blank i.e. No)
      
    2. Request.IsAuthenticated Global.asax方法中记录Application_BeginRequest()值正在输出“False”(bool)

    3. 我还需要检查一下,看看可能会出现什么问题? 感谢

1 个答案:

答案 0 :(得分:1)

我认为这正是预期的结果。在webforms请求管道中,AuthenticateRequest事件在BeginRequest事件之后引发,因此请求尚未在BeginRequest事件中进行身份验证。

有关管道的说明,请参阅(例如)here。或只是谷歌asp net webforms request pipeline,你会发现很多链接......

我链接到的页面的部分副本:

  1. 验证请求,该请求检查浏览器发送的信息并确定其是否包含潜在的恶意标记。有关更多信息,请参阅ValidateRequest和Script Exploits Overview。
  2. 如果在Web.config文件的UrlMappingsSection部分中配置了任何URL,则执行URL映射。
  3. 提升BeginRequest事件。
  4. 提升AuthenticateRequest事件。
  5. 提升PostAuthenticateRequest事件。
  6. 提升AuthorizeRequest事件。
  7. 提升PostAuthorizeRequest事件。
  8. ...