如何在使用OWIN Cookie身份验证时阻止Web API获取401

时间:2015-10-07 05:33:28

标签: angularjs asp.net-mvc authentication cookies owin

我有一个使用OWIN cookie身份验证的MVC 5的Web应用程序。它还使用AngularJS进行web api调用。 Angular代码仅在用户成功登录并经过身份验证后调用,并且一切正常运行。

但是,有人可以解释一下,如果用户闲置了20分钟左右,哪个组件(Chrome,OWIN,IIS,...)负责最终发布401。在MVC中,这不是问题,因为重定向会自动重新进行身份验证,但使用web api我唯一的选择是让用户重新登录。

好吧,这就是第一件事,谁负责会议的时间安排并给401(我可以改变它)但是也有任何方法可以通过web api调用来保持会话活着,这样即使用户空闲,api呼叫会停止超时吗?

具体来说,我已经实现了SignalR,其方式是客户端的信号导致客户端发出api调用来刷新其数据。我意识到我可以推动刷新,但此刻有点棘手。所以最新发生的事情是更新正在发生,但最终导致401我想避免。

2 个答案:

答案 0 :(得分:0)

下面是一个理想的流程

  1. 服务器登录=>创建cookie集到期时间,将其传递给客户端
  2. 客户端保存Cookie&通过每个请求传递
  3. 服务器检查cookie的有效性,包括到期时间
  4. 如果无效或已过期,服务器将以401
  5. 响应

答案 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并发回一个响应,告诉浏览器它已注销 - 您可以弹出登录对话框或重定向到登录网址。