Что является лучшим способом, чтобы реализовать смешанные формы ASP.NET авт (ад + ДБ)?

StackOverflow https://stackoverflow.com/questions/206767

Вопрос

Я хочу реализовать аутентификацию в формах на веб-сайте 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 КАЖДЫЙ раз, когда вы получаете значение из сеанса!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top