使用带有表单身份验证的滑动过期的SignalR时出现问题。 由于SignalR保持从服务器轮询,用户身份验证永远不会过期...
我研究了很多......并从http://www.asp.net/signalr/overview/security/introduction-to-security#reconcile
找到了一篇有趣的文章 他们说:如果您的站点使用表单身份验证的滑动过期,则用户的身份验证状态可能会更改,并且没有任何活动可以使身份验证Cookie保持有效。在这种情况下,用户将被注销,用户名将不再与连接令牌中的用户名匹配。
如果他闲置20分钟我需要让用户的身份验证过期,但我不能......
任何想法?
非常感谢!
答案 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;
}
}
}