2

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

我研究了很多......并从http://www.asp.net/signalr/overview/security/introduction-to-security#reconcile找到了一篇有趣的文章

他们说:

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

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

有任何想法吗?
非常感谢!

4

1 回答 1

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;
      }
   }
}
于 2015-12-08T18:10:17.067 回答