【问题标题】:SignalR with sliding expiration with Forms Authentication带有表单身份验证的滑动到期的 SignalR
【发布时间】:2013-07-31 08:19:05
【问题描述】:

在使用带有表单身份验证的滑动到期的 SignalR 时遇到问题。 由于 SignalR 不断从服务器轮询,用户身份验证永不过期...

我研究了很多……发现了一篇来自http://www.asp.net/signalr/overview/security/introduction-to-security#reconcile的有趣文章

他们说:

如果您的站点使用表单身份验证的滑动到期,用户的身份验证状态可能会发生变化,并且没有任何活动可以保持身份验证 cookie 有效。在这种情况下,用户将被注销,并且用户名将不再与连接令牌中的用户名匹配。

如果用户闲置 20 分钟,我需要让用户的身份验证过期,但我不能......

有什么想法吗?
非常感谢!

【问题讨论】:

  • 将signalr app和普通app拆分成两个app,signalr app不会影响普通app的认证,对signalr请求进行认证,发送一个为认证用户生成的token跨度>
  • 这是一个解决方案,但我担心我的客户不允许将其拆分为两个。我建议我的客户使用 JQuery-idle-timeout 来手动处理到期。但我的客户更喜欢在信号器中寻求解决方案。

标签: asp.net-mvc forms-authentication signalr


【解决方案1】:

我遇到了同样的问题。我在 GitHub 问题上发现了一种方法,该方法利用 HttpModule 在管道末端删除 auth cookie。这在我的场景中效果很好。

https://github.com/SignalR/SignalR/issues/2907

public class SignalRFormsAuthenticationCleanerModule : IHttpModule
{
   public void Init(HttpApplication application)
   {
      application.PreSendRequestHeaders += OnPreSendRequestHeaders;
   }

   private bool ShouldCleanResponse(string path)
   {
      path = path.ToLower();
      var urlsToClean = new string[] { "/signalr/", "<and any others you require>" };

      // Check for a Url match
      foreach (var url in urlsToClean)
      {
         var result = path.IndexOf(url, StringComparison.OrdinalIgnoreCase) > -1;
         if (result)
            return true;
      }

      return false;
   }

   protected void OnPreSendRequestHeaders(object sender, EventArgs e)
   {
      var httpContext = ((HttpApplication)sender).Context;

      if (ShouldCleanResponse(httpContext.Request.Path))
      {
         // Remove Auth Cookie from response
         httpContext.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
         return;
      }
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 2020-06-19
    • 2019-01-22
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多