.NET Core Identity не обновляет файл cookie аутентификации для статических файлов и выдает ошибку 500

У меня есть приложение .NET Core Web API с Angular 2 на стороне клиента.
Я настраиваю .NET Core Identity со следующими параметрами в Startup.cs:

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;

So,

  1. Пользователь вошел в систему - установлен файл cookie авторизации.

  2. Через 60 секунд вызовы конечных точек API/* обновляют этот файл cookie до нового значения... поэтому вызовы работают

  3. Однако вызовы файлов HTML/JS не обновляют файл cookie — они продолжают использовать предыдущий файл cookie, который теперь, предположительно, не привязан к сеансу, что означает, что мы получаем 500. ошибка, поскольку он не может что-то сделать.

  4. При загрузке любой конечной точки API/* файлы cookie и файлы HTML/JS снова работают.

Короче говоря, проблема, похоже, связана с тем, что файл cookie авторизации не обновляется для всего статического контента. И он просто отлично работает без каких-либо файлов cookie, когда пользователь выходит из системы.

Как я могу это исправить? Заранее спасибо.


person A. Gladkiy    schedule 02.06.2017    source источник


Ответы (1)


Согласно разделу документации Introduction to working with static files in ASP.NET Core:

Статический файловый модуль обеспечивает отсутствие проверок авторизации.

Решение для этого (из той же статьи):

  • Храните их за пределами wwwroot и любого каталога, доступного промежуточному программному обеспечению статических файлов и.
  • Обслуживайте их через действие контроллера, возвращая FileResult где применяется авторизация

Таким образом, в основном вам нужно либо постоянно делать запросы к вашему API, чтобы обновлять сеанс, либо создавать какой-то фиктивный контроллер для статических файлов.

person VMAtm    schedule 02.06.2017
comment
Не могу понять, зачем тогда встроенная папка wwwroot? Для приложений без авторизации? Я хочу, чтобы статические файлы всегда работали без изменения файлов cookie или чего-либо еще. - person A. Gladkiy; 07.06.2017
comment
Это встроенная папка для ваших файлов. Команда ASP.NET приняла решение, что статические файлы по умолчанию не нуждаются в авторизованных запросах. - person VMAtm; 07.06.2017
comment
Хорошо, тогда почему статические файлы не работают с авторизацией? Почему я вижу ошибку 500 вместо доступа к статическому файлу, даже если cookie изменен? - person A. Gladkiy; 07.06.2017
comment
Я думаю, это потому, что ошибка исходит из кода, который проверяет файл cookie. Я думаю, вам следует подумать о том, чтобы создать проблему на github, чтобы получить официальный совет по вашему решению. - person VMAtm; 07.06.2017