我在客户端使用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;
所以,
用户已登录 - 已设置身份验证Cookie。
60秒后 - 调用 API / * 端点将此Cookie更新为新值..所以调用工作
但是对 HTML / JS 文件的调用不会更新cookie - 他们继续使用之前的cookie,现在可能与会话无关,这意味着我们得到 500 错误,因为它无法做某事。
加载任何 API / * 端点会更新Cookie, HTML / JS 文件会再次生效。
所以简而言之 - 问题似乎与auth cookie没有为所有静态内容刷新有关。当用户退出时,它在没有任何cookie的情况下工作正常。
我该如何解决?提前谢谢。
答案 0 :(得分:1)
根据文档部分Introduction to working with static files in ASP.NET Core
:
静态文件模块提供无授权检查。
解决方案(来自同一篇文章):
- 将它们存储在
wwwroot
之外以及静态文件中间件可访问的任何目录和- 通过控制器操作为他们提供服务,返回
FileResult
授权的地方
所以基本上你必须不断地为你的API提出一些请求以更新会话或为静态文件创建一些虚拟控制器。