.NET Core Identity不刷新静态文件的auth cookie并抛出500错误

时间:2017-06-02 12:39:55

标签: angular cookies .net-core static-files asp.net-core-identity

我在客户端使用Angular 2的.NET Core Web API应用程序 我在Startup.cs中使用以下选项设置了.NET Core Identity:

options.Password.RequiredLength = 5;                                              
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireUppercase = false;
options.Password.RequireNonAlphanumeric = false;
options.SecurityStampValidationInterval = TimeSpan.FromMinutes(1);
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 100;
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(14);
options.Cookies.ApplicationCookie.LoginPath = "/api/signin/signin";
options.Cookies.ApplicationCookie.LogoutPath = "/api/signin/signout";
options.User.RequireUniqueEmail = false;

所以,

  1. 用户已登录 - 已设置身份验证Cookie。

  2. 60秒后 - 调用 API / * 端点将此Cookie更新为新值..所以调用工作

  3. 但是对 HTML / JS 文件的调用不会更新cookie - 他们继续使用之前的cookie,现在可能与会话无关,这意味着我们得到 500 错误,因为它无法做某事。

  4. 加载任何 API / * 端点会更新Cookie, HTML / JS 文件会再次生效。

  5. 所以简而言之 - 问题似乎与auth cookie没有为所有静态内容刷新有关。当用户退出时,它在没有任何cookie的情况下工作正常。

    我该如何解决?提前谢谢。

1 个答案:

答案 0 :(得分:1)

根据文档部分Introduction to working with static files in ASP.NET Core

  

静态文件模块提供授权检查。

解决方案(来自同一篇文章):

  
      
  • 将它们存储在wwwroot之外以及静态文件中间件可访问的任何目录
  •   
  • 通过控制器操作为他们提供服务,返回FileResult授权的地方
  •   

所以基本上你必须不断地为你的API提出一些请求以更新会话或为静态文件创建一些虚拟控制器。