Что является лучшим способом, чтобы реализовать смешанные формы ASP.NET авт (ад + ДБ)?
-
03-07-2019 - |
Вопрос
Я хочу реализовать аутентификацию в формах на веб-сайте ASP.NET сайт должен искать пользователя в базе данных, чтобы получить некоторые данные, а затем проходить аутентификацию в LDAP (Active Directory) для проверки комбинации пользователь / пароль.
После этого мне нужно сохранить экземпляр класса, представляющий пользователя, чтобы использовать его в различных формах.
Я пытался сделать это раньше с помощью элемента управления входом, который проверяет предыдущие условия и выполняет AuthenticateEventArgs.Authenticated = true
и поместил объект внутри сеанса: Session ["user"] = authenticatedUser;
но у меня возникла проблема с синхронизацией их обоих (сеанс истек до того, как был отправлен файл cookie auth, и я получил NullReferenceExceptions, когда страницы попытались использовать ныне несуществующий объект session).
Каков наилучший способ добиться этого?Есть ли какой-нибудь способ синхронизировать время ожидания сеанса со сроком службы файлов cookie?Пользовательский объект должен быть сохранен каким-либо другим способом?Неужели я упустил главное?
Обновить:Я не могу использовать Windows auth provider, потому что сайт должен быть доступен из-за пределов локальной сети.
Решение
Я бы использовал проверку подлинности Windows в качестве основного поставщика проверки подлинности, но включил бы мою собственную простую сохраняемость базы данных для информации о пользователе.
Ваш метод сеанса будет работать, вы можете настроить тайм-аут сеанса в IIS и сопоставить его с таймаутом файла cookie аутентификации.
Кроме того, вы можете сделать что-то подобное в HttpModule, чтобы перехватывать крайние случаи (пул приложений перерабатывает и т.д.), Которые также очищают сеанс
Псевдокод:
if (session["user"] == null)
{
Authentication.SignOut();
}
Это вынудило бы пользователя пройти аутентификацию.
Другие советы
Я установил значения тайм-аута сеанса и аутентификации cookie равными одному и тому же значению.Я использую раздвижные окна для своего файла cookie auth.Я также взял за привычку никогда не предполагать, что значения, которые я получаю из сеанса, не равны нулю, прежде чем пытаться их использовать.Я часто абстрагирую всю функциональность сеанса в прокси-класс, который содержит строго типизированные свойства для значений, которые я сохраняю в сеансе.Обработка ошибок для неверных данных сеанса локализована в прокси-сервере.
Сохранение информации о пользователе в сеансе будет работать нормально.Чтобы синхронизировать время ожидания сеанса и время авторизации файлов cookie, просто отредактируйте свой web.config:
<sessionState timeout="XX" />
<authentication mode="Forms">
<forms loginUrl="Login.aspx" timeout="XX" />
</authentication>
Оба значения указаны в минутах.
Проверяйте значение null КАЖДЫЙ раз, когда вы получаете значение из сеанса!