SignalR and ASP.NET Identity ExpireTimeSpan



我正在使用带有基于cookie的身份验证的ASP.NET Identity。我正在CookieAuthenticationOptions类上设置ExpireTimeSpan,以控制在用户必须再次登录之前允许多长时间处于非活动状态。

这一切都很好,但当我将SignalR添加到应用程序时,用户在一段时间不活动后就不再需要登录了。SignalR会定期发出"ping"请求,我想正是这一点导致了cookie到期时间的延长。

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

我已经研究了Microsoft.Owin.Security.Cookies中的一些代码,尤其是CookieAuthenticationHandler类。AuthenticateCoreAsync方法中有逻辑来决定是否续订cookie。但是,CookieAuthenticationHandler类是内部的,所以我不能覆盖这个方法。

如果有一个钩子我可以用来做这件事,你有什么想法吗?

我们公司通过使用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"type="Site.Components.HttpModules.NoFormsAAuthenticationModule"/>

<system.webServer><模块runAllManagedModulesForAllRequests="true">
<add name="NoFormsAuthenticationModule"type="Site.Components.HttpModules.NoFormsAAuthenticationModule"/>

相关内容

  • 没有找到相关文章

最新更新