gpt4 book ai didi

SignalR 和 ASP.NET 标识 ExpireTimeSpan

转载 作者:行者123 更新时间:2023-12-01 13:53:36 24 4
gpt4 key购买 nike

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

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

我正在寻找一种不为 SignalR URL 更新 cookie 到期的方法。

我研究了 Microsoft.Owin.Security.Cookies 中的一些代码,特别是 CookieAuthenticationHandler 类。 AuthenticateCoreAsync 方法中有决定是否更新 cookie 的逻辑。但是,内部的 CookieAuthenticationHandler 类,所以我不能覆盖这个方法。

如果有一个我可以用来做这个的钩子(Hook)有什么想法吗?

最佳答案

我们在我的公司通过使用 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.NoFormsAuthenticationModule"/>

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

...

关于SignalR 和 ASP.NET 标识 ExpireTimeSpan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22962505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com