2

我在客户端使用了Angular 2的.NET Core Web API应用程序。
我安装.NET核心身份与Startup.cs以下选项:.NET Core Identity不会刷新静态文件的授权cookie并引发500错误

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,现在大概不会与会话绑定,这意味着我们得到了错误,因为它不能做某事。

  4. 加载任何API/*终点更新cookie并HTML/JS文件重新工作。

所以简而言之 - 这个问题似乎与auth cookie没有被刷新所有静态内容有关。当用户注销时,它没有任何cookie就可以正常工作。

我该如何解决这个问题?提前致谢。

回答

1

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

静态文件模块提供没有授权检查。的wwwroot

  • 商店他们和静态文件中间件访问的任何目录
  • 通过一个控制器的动作为他们服务:

解决这个(来自同一文章) ,返回应用授权的FileResult

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

+0

我不明白,那为什么我们需要内置文件夹“wwwroot”?对于未经授权的应用?我想要静态文件始终工作,无需更改cookie或其他任何东西。 –

+0

它是您的文件的内置文件夹。 ASP.NET团队决定默认情况下静态文件不需要授权请求。 – VMAtm

+0

好的,那为什么静态文件没有授权?为什么即使Cookie被更改,我也会看到500错误而不是访问静态文件? –