SignalR和ASP.NET Identity ExpireTimeSpan

时间:2014-04-09 12:26:34

标签: signalr asp.net-identity

我正在使用基于cookie的身份验证的ASP.NET身份。我在CookieAuthenticationOptions类上设置ExpireTimeSpan来控制在用户必须再次登录之前允许多长时间不活动。

这一切都运行正常,但是当我将SignalR添加到应用程序时,用户不再需要在一段时间不活动后登录。 SignalR做了一次" ping"请定期请求,我认为这会导致cookie过期延长。

我正在寻找一种不续订SignalR URL的cookie过期的方法。

我已经查看了Microsoft.Owin.Security.Cookies中的一些代码,特别是CookieAuthenticationHandler类。 AuthenticateCoreAsync方法中有逻辑来决定是否更新cookie。但是,内部的CookieAuthenticationHandler类因此我无法覆盖此方法。

任何想法,如果有一个钩子我可以用来做这个?

1 个答案:

答案 0 :(得分:0)

我们通过使用HttpModule从信号器响应中删除cookie来解决我的问题。

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

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

        var path = httpContext.Request.Path;

        var noAuthentUrls = new string[] { "/signalr/" };

        foreach (var url in noAuthentUrls)
        {
            var noAuthentication = path.IndexOf(url, StringComparison.OrdinalIgnoreCase) > -1;

            if (noAuthentication)
                httpContext.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
        }            
    }

}

希望它对你有所帮助。

别忘了在web.config上添加条目:

  

<的System.Web>
         <的HttpModules>            < add name =" NoFormsAuthenticationModule"类型=" Site.Components.HttpModules.NoFormsAuthenticationModule" />

     

< system.webServer>        < modules runAllManagedModulesForAllRequests =" true">
         < add name =" NoFormsAuthenticationModule"类型=" Site.Components.HttpModules.NoFormsAuthenticationModule" />

     

...