【问题标题】:ASP.NET_SessionId vs .ASPXAUTH why do we need both of them?ASP.NET_SessionId 与 .ASPXAUTH 为什么我们都需要它们?
【发布时间】:2014-05-20 11:34:47
【问题描述】:

如果用户登录与否,我们不能只存储在会话中并摆脱 .ASPXAUTH 吗?

【问题讨论】:

    标签: asp.net asp.net-mvc-3 asp.net-mvc-4 asp-classic


    【解决方案1】:

    ASP.Net_SessionId 是一个cookie,用于在服务器上识别用户session。会话是服务器上的一个区域,可用于在 http 请求之间存储数据。

    例如,控制器动作可能会执行:

    Session["FirstName"] = model.FirstName;
    

    然后,在后续操作中,可以从会话中检索名字:

    var firstName = Session["FirstName"];
    

    ASP.Net_SessionId 标识用户请求的会话。不同的用户将提交不同的 cookie,因此Session["FirstName"] 将为不同的用户保存不同的值。

    ASPXAUTH 是一个 cookie,用于识别用户是否为 authenticated(即是否已验证其身份)。例如,控制器操作可以确定用户是否提供了正确的登录凭据,如果是,则发出身份验证 cookie using

    FormsAuthentication.SetAuthCookie(username, false);
    

    然后您可以使用[Authorize] 属性检查用户是否有权执行某项操作,该属性检查ASPXAUTH cookie 的存在。

    因此,总而言之,cookie 有两个不同的目的。一种用于确定用户会话状态,一种用于确定用户是否经过身份验证。

    要完成您的问题的答案,是的,您可以去掉ASPXAUTH cookie,只使用会话来识别用户(我在较旧的经典 asp 应用程序中看到过这样做)但我不推荐它.更好地分离关注点并在必要时使用适当的方法。会话和身份验证将设置自己的超时值。通过使用会话进行身份验证,您将只有一次超时。我不确定仅使用会话进行身份验证是否存在任何安全隐患,但我仍然会将它们分开。

    【讨论】:

    • ASPXAUTH 和在默认注册和登录功能的asp.net 应用程序中登录时创建的AspnetCookie 有什么区别?
    【解决方案2】:

    .NET 发出一个完全不同的 cookie,名为 ASP.NET_SessionId,用于跟踪会话状态。

    ASPXAUTH cookie 用于确定用户是否经过身份验证。

    所以这是两个不同的概念,即会话状态管理和使用表单身份验证的身份验证管理。

    如果您使用 Session 进行身份验证而忘记了表单身份验证,您将摆脱 .ASPXAUTH

    【讨论】:

      【解决方案3】:

      两者都是必需的,使用任何一个都会导致以下漏洞:

      *ASP.NET_SessionId 单独:会话固定

      *Forms Authentication Cookie Alone: Can't Terminate Authentication Token on the server

      另外,您需要确保它们正确耦合在一起。否则,配置也会带来风险:

      *松散耦合的 ASP.NET_SessionID 和表单身份验证 Cookie:仍然存在漏洞

      参考: http://blog.securityps.com/2013/06/session-fixation-forms-authentication.html

      【讨论】:

        【解决方案4】:

        会话状态和身份验证彼此无关。您可以使用一个而不使用另一个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-15
          • 2017-04-17
          • 2013-03-06
          • 2019-06-09
          • 1970-01-01
          • 2017-12-27
          • 2017-02-24
          相关资源
          最近更新 更多