Приложение ASP.NET для аутентификации в Active Directory или SQL через проверку подлинности Windows или проверку подлинности с помощью форм.

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

Вопрос

Я пишу приложение, которому потребуется несколько форм аутентификации.

Приложению необходимо будет поддерживать аутентификацию в Active Directory, но иметь возможность вернуться к поставщику членства SQL, если пользователь не находится в Active Directory.Мы можем обработать ошибку поставщика SQL в коде на основе предоставленного имени пользователя, поскольку имя пользователя будет иметь другой формат, чем имя пользователя Active Directory.

Возможно ли это вообще?Я имею в виду, могу ли я использовать членство и одновременно использовать ActiveDirectoryMembershipProvider и SqlMembershipProvider, или мне придется использовать свое собственное?

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

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

Мне интересно, какие мысли возникают у меня, когда я начинаю идти по этому пути.Возможно ли то, что я хочу сделать, без того, чтобы я сворачивал свои собственные, или есть способ соединить их вместе?


Спасибо за ответ.

Причина, по которой я изначально спросил, заключалась в том, что около 7 лет назад мне удалось заставить этот конкретный senerio работать, используя IIS для аутентификации и последующей передачи учетных данных в веб-приложение сервера Lotus Domino.Если пользователь не был аутентифицирован через Windows Authentication/ISS, аутентификацию будет выполнять Domino.Это было то, что я хотел сделать здесь, но не мог придумать, как заставить это работать в IIS.

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

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

В качестве дополнительной мысли: есть ли способ добавить в базу данных SQL достаточно AD, чтобы я мог аутентифицировать пользователей в базе данных SQL с внешнего сервера, используя их учетные данные AD, не создавая при этом каких-либо проблем с безопасностью?Надеюсь, я четко пишу то, что думаю....

Еще раз спасибо!

Тим

Это было полезно?

Решение

Вот как я справился с подобной ситуацией, основываясь на эта информация:

  1. Настроил приложение для использования проверки подлинности с помощью форм.
  2. Задайте для LoginUrl страницу с именем WinLogin.aspx.
  3. В WinLogin.aspx используйте Request.ServerVariables["LOGON_USER"] для получения имени пользователя, а затем вызовите FormsAuthentication.RedirectFromLoginPage(authorizedUserName, false) для входа в систему.Я думаю, вы также можете вручную проверить Active Directory в этом месте.
  4. Создайте html-страницу, которая перенаправляет на страницу с именем Login.aspx.
  5. Login.aspx — это ваше стандартное имя пользователя и пароль для входа.
  6. В IIS включите встроенную проверку подлинности и анонимность на всем сайте, но запретите анонимный доступ к WinLogin.aspx.
  7. В IIS задайте ошибки 401 для страницы, созданной на шаге 3.

В основном происходит следующее: когда неаутентифицированный пользователь заходит на сайт, он перенаправляется на WinLogin.aspx.Поскольку анонимность отключена, встроенная безопасность производит проверку.Если это пройдет, ваш собственный код в WinLogin сможет работать.Если встроенная проверка безопасности не пройдена, возникает ошибка 401.Ваша пользовательская страница 401 перенаправляется на Login.aspx, где пользователь может войти в систему, используя свое имя пользователя и пароль, у поставщика SQL.

Другие советы

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

Вы можете пройти аутентификацию в Active Directory или хранилище пользователей SQL с помощью аутентификации форм с помощью специального поставщика.Однако пользователям AD все равно потребуется ввести свое имя пользователя и пароль.Хотя я никогда не комбинировал эти два метода, я использовал аутентификацию с помощью форм для аутентификации в обоих источниках в тот или иной момент.

С учетом вышесказанного, я думаю, вам стоит рассмотреть возможность снижения «гибкости» вашей системы.Если у вас есть внешний сервер и внутренний сервер, вы можете просто изменить конфигурацию поставщика в каждой копии приложения, чтобы она работала с другим источником.Затем вы можете настроить внутренний для использования аутентификации Windows (автоматической), а внешний для использования аутентификации с помощью форм.

ИМХО, я считаю, что внутренние пользователи не должны использовать внешний сервер для доступа к приложению.Если да, то у них должна быть учетная запись пользователя, хранящаяся в SQL, полностью отделенная от их учетной записи AD.По сути, когда кто-то обращается к приложению извне, он действует как внешний пользователь, независимо от своего физического местоположения.

Что ж, можно использовать ActiveDirectoryMembershipProvider и SqlMembershipProvider, но для этого необходимо разработать страницу входа с собственным кодом вместо элементов управления входом.

Что касается смешанной аутентификации (Windows и Forms), насколько мне известно, только IIS 7 делает ее простой и понятной.Подробности смотрите в этом посте,

http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx

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