【问题标题】:Disadvantages associated with use Forms Authentication "slidingExpiration"与使用表单身份验证“slidingExpiration”相关的缺点
【发布时间】:2012-04-12 10:46:46
【问题描述】:

假设我在 web.config 中使用了类似的东西

<authentication mode="Forms">
<forms

      loginUrl ="~/HomeLogin.aspx"
      cookieless= "AutoDetect" 
      slidingExpiration="true"
      timeout="10"
       protection ="All"

/>
</authentication>

如果slidingExpiration 设置为true(默认值),每次FormsAuthenticationModule 对用户进行身份验证时,它都会更新票证的到期时间。如果设置为 false,则不会在每个请求上更新到期时间,从而导致票证在首次创建票证后的超时分钟数后过期。

注意: 身份验证票证中存储的到期时间是绝对日期和时间值,例如 2008 年 8 月 2 日上午 11:34。此外,日期和时间是相对于 Web 服务器的本地时间的。这个设计决策可能会对夏令时 (DST) 产生一些有趣的副作用,即美国的时钟提前一小时(假设 Web 服务器托管在观察夏令时的区域设置)。考虑在 DST 开始时间(即凌晨 2:00)附近有 30 分钟到期的 ASP.NET 网站会发生什么。想象一下,一位访问者在 2008 年 3 月 11 日凌晨 1:55 登录网站。这将生成一个表单身份验证票证,该票证将于 2008 年 3 月 11 日凌晨 2:25(未来 30 分钟)到期。但是,一旦凌晨 2:00 滚动,由于 DST,时钟会跳到凌晨 3:00。当用户在登录六分钟后(凌晨 3:01)加载新页面时,FormsAuthenticationModule 会注意到票证已过期并将用户重定向到登录页面。

这是一个可能导致问题的实例。任何人都可以指出这种方法的任何此类缺点。我有兴趣了解它。

谢谢

【问题讨论】:

  • 您是问slidingExpiration="true" 的缺点还是相反的缺点?

标签: asp.net forms-authentication


【解决方案1】:

FormsAuthentication 使用 UTC 时间进行计算。您需要转到源代码(或反射器)才能看到这一点,所有使用 UTC 日期的属性/方法都是内部的。

根据RFC 6265, section 5.1.1,Cookie 使用 UTC 时间作为过期日期。

"让 parsed-cookie-date 是日期,其日期,月份, 年、小时、分钟和秒(以 UTC 为单位)是月份中的日期- 值、月值、年值、小时值、 分值和秒值。”

这意味着夏令时不会成为问题。

只要用户处于活动状态,滑动到期将允许无限期登录。这意味着第三方可以在同样无限期的时间内获取 cookie 并以用户身份进行身份验证。

绝对过期不会阻止这种情况,但需要定期重新进行身份验证,从而限制第三方可以使用 cookie 的时间窗口。

【讨论】:

    【解决方案2】:

    表单身份验证交易始终采用 UTC。

    【讨论】:

      猜你喜欢
      • 2019-06-28
      • 2011-11-16
      • 2012-03-15
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多