我有一个使用OWIN cookie身份验证的MVC 5的Web应用程序。它还使用AngularJS进行web api调用。 Angular代码仅在用户成功登录并经过身份验证后调用,并且一切正常运行。
但是,有人可以解释一下,如果用户闲置了20分钟左右,哪个组件(Chrome,OWIN,IIS,...)负责最终发布401。在MVC中,这不是问题,因为重定向会自动重新进行身份验证,但使用web api我唯一的选择是让用户重新登录。
好吧,这就是第一件事,谁负责会议的时间安排并给401(我可以改变它)但是也有任何方法可以通过web api调用来保持会话活着,这样即使用户空闲,api呼叫会停止超时吗?
具体来说,我已经实现了SignalR,其方式是客户端的信号导致客户端发出api调用来刷新其数据。我意识到我可以推动刷新,但此刻有点棘手。所以最新发生的事情是更新正在发生,但最终导致401我想避免。
答案 0 :(得分:0)
下面是一个理想的流程
答案 1 :(得分:0)
可以在CookieAuthenticationOptions中配置Cookie到期时间。请参阅文件〜/ App_Start / Startup.Auth.cs
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan=TimeSpan.FromDays(365),
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
将ExpireTimeSpan设置为所需的TimeSpan。
对于未通过身份验证的网络API调用,您可以捕获401并发回一个响应,告诉浏览器它已注销 - 您可以弹出登录对话框或重定向到登录网址。