Каков наилучший способ реализации смешанной аутентификации ASP.NET форм (AD + DB)? - PullRequest
1 голос
/ 16 октября 2008

Я хочу реализовать проверку подлинности с помощью форм на веб-сайте ASP.NET, сайт должен искать пользователя в базе данных, чтобы получить некоторые данные, а затем проходить проверку подлинности с использованием LDAP (Active Directory) для проверки комбинации пользователя и пароля.

После этого мне нужно сохранить экземпляр класса, который представляет пользователя, чтобы использовать его в различных формах.

Я пытался сделать это раньше с помощью элемента управления для входа в систему, который проверяет предыдущие условия и делает AuthenticateEventArgs.Authenticated = true и помещает объект в сеанс: Session ["user"] = authenticatedUser;, но у меня были проблемы с синхронизацией обоих (сеанс истек до того, как auth cookie, и я получил NullReferenceExceptions, когда страницы пытались использовать уже не существующий объект сеанса).

Какой лучший способ сделать это? Есть ли способ синхронизировать время ожидания сеанса с продолжительностью жизни файлов cookie? Пользовательский объект должен быть сохранен любым другим способом? Я упустил суть?

UPDATE: Я не могу использовать Windows Auth Provider, потому что сайт должен быть доступным из-за пределов сети.

Ответы [ 3 ]

1 голос
/ 16 октября 2008

Я бы использовал проверку подлинности Windows в качестве основного поставщика проверки подлинности, но свернул бы свою собственную простую постоянную базу данных для пользовательской информации.

Ваш метод сеанса будет работать, вы можете настроить время ожидания сеанса в IIS и сопоставить его с тайм-аутом файла cookie для аутентификации.

Кроме того, вы можете сделать что-то подобное в HTTPModule, чтобы отследить крайние случаи (повторные пулы приложений и т. Д.), Которые также очищают сеанс

Psuedocode:

if (session["user"] == null)
{
    Authentication.SignOut();
}

Это заставит пользователя проходить аутентификацию.

0 голосов
/ 17 октября 2008

Сохранение информации о пользователе в сеансе будет работать нормально. Чтобы синхронизировать тайм-аут сеанса и тайм-аут аутентификации файлов cookie, просто измените файл web.config:

<sessionState timeout="XX" />
<authentication mode="Forms">
  <forms loginUrl="Login.aspx" timeout="XX" />
</authentication>

Оба значения указаны в минутах.

Проверка на нулевое значение КАЖДЫЙ раз, когда вы получаете значение из сеанса!

0 голосов
/ 16 октября 2008

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

...