我正在使用基于cookie的身份验证的ASP.NET身份。我在CookieAuthenticationOptions类上设置ExpireTimeSpan来控制在用户必须再次登录之前允许多长时间不活动。
这一切都运行正常,但是当我将SignalR添加到应用程序时,用户不再需要在一段时间不活动后登录。 SignalR做了一次" ping"请定期请求,我认为这会导致cookie过期延长。
我正在寻找一种不续订SignalR URL的cookie过期的方法。
我已经查看了Microsoft.Owin.Security.Cookies中的一些代码,特别是CookieAuthenticationHandler类。 AuthenticateCoreAsync方法中有逻辑来决定是否更新cookie。但是,内部的CookieAuthenticationHandler类因此我无法覆盖此方法。
任何想法,如果有一个钩子我可以用来做这个?
答案 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" />...