#c# #iis #asp.net-core-2.1
#c# #iis #asp.net-core-2.1
Вопрос:
У меня есть веб-сайт, встроенный в asp.net ядро 2.1 с пользователями в разных ролях. Когда я добавляю или удаляю роль для пользователя, я хочу, чтобы это соответствующим образом изменило его разрешенное поведение.
Что я сделал:
В Startup.cs
я добавил следующую строку в ConfigureServices
-функцию:
services.Configure<SecurityStampValidatorOptions>(options => options.ValidationInterval = TimeSpan.FromSeconds(20));
Когда я запускаю веб-сайт локально через Visual Studio, все работает как ожидалось: максимум через 20 секунд измененные роли вступают в силу, так что у меня есть права, соответствующие текущим ролям. Не имеет значения, были ли эти изменения выполнены через UserManager.RemovefromRolesAsync(user, "rolename")
или вручную путем изменения ролей в базовой базе данных.
Теперь я публикую веб-сайт в IIS (версия 10 на Windows Server 2016). Через 20 секунд измененные роли вступают в силу ровно один раз. Когда я теперь перехожу на любую другую страницу (до истечения следующего интервала в 20 секунд), я внезапно вижу все, как это было раньше. User.IsInRole("rolename")
например, теперь возвращает true
значение, даже если я просто удалил эту роль заранее. через 20 секунд это снова false ровно один раз.
Есть ли у кого-нибудь идеи, почему этот код может вести себя по-другому в контексте IIS?
Для контекста: в моей базе данных есть таблицы для User, Role, UserRole, и в качестве основы используется аутентификация по имени пользователя / паролю. Но клиент хотел бы автоматически входить в систему с проверкой подлинности Windows (веб-сайт только для интрасети), все еще используя роли, определенные в базе данных, игнорируя любые роли из active directory. Я сделал это, проверив, является ли пользователь, вошедший в систему в данный момент, WindowsPrincipal
, который затем будет повторно авторизован с пользователем, ориентированным на базу данных.
Редактировать: ошибочное поведение не зависит от Visual Studio (IIS Express) или IIS. Я опубликовал его в IIS на localhost, и все по-прежнему работает. Итак, localhost => OK, удаленный (но интрасеть) => проблемы. Это согласовано во всех браузерах, поэтому я предполагаю, что это не конфигурация в браузере.
Комментарии:
1. Вступают ли в силу другие настройки в IIS (например, среда ASPNETENVIRONMENT — «Производство» вместо «Разработки»), а затем вместо этого используются другие настройки (например, роли кэширования в файлах cookie)?
2. @MartinCostello Я только что проверил свой исходный код. Ни одно из мест, где я проверяю текущую среду, не приведет к чему-либо, связанному с кэшированием, файлами cookie или тому подобным. Когда я запускаю проект с конфигурацией для IIS Express Production (которая устанавливает переменную в «Production»), все по-прежнему работает так, как ожидалось.