具有表单身份验证的滑动到期的SignalR

时间:2013-07-31 00:27:12

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

使用带有表单身份验证的滑动过期的SignalR时出现问题。 由于SignalR保持从服务器轮询,用户身份验证永远不会过期...

我研究了很多......并从http://www.asp.net/signalr/overview/security/introduction-to-security#reconcile

找到了一篇有趣的文章 他们说:

  

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

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

任何想法?
非常感谢!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我发现在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;
      }
   }
}