Лучший подход для единого входа, чтобы обслуживать интегрированную аутентификацию Windows, а также пользователей, не входящих в домен - PullRequest
3 голосов
/ 02 декабря 2009

Это может быть дубликат (не уверен), но так как я не могу утолить свою жажду правильного ответа (0: вот так:

Я должен предоставить единый вход для моего веб-приложения asp.net. Где:

Случай 1. Пользователь может войти без учетных данных, если пользователь уже находится в домене (вошел в домен windows).

Случай 2. Пользователю разрешено входить в систему, если пользователь не находится в домене, запрашивая / проверяя учетные данные пользователя для входа из активного каталога.

Вопрос 1a. Мне были бы интересны комментарии о шагах, которые я «выполняю» и «должен выполнить», чтобы выполнить требование. Как я могу улучшить это? Улучшение смысла, это правильный способ / подход к предоставлению вышеуказанных необходимых функций?

Вопрос 1b. Кроме того, в настоящее время у меня есть жестко закодированные роли в моей базе данных; Я планирую переместить его в роли пользователя активного каталога; чтобы я мог использовать функциональность метода .IsInRole. Что вы думаете об этом?

Прямо сейчас я реализовал это следующим образом.

Для случая 1 приложение использует: Проверка подлинности Windows; в основном как следующее:

return ((WindowsIdentity)(HttpContext.Current.User.Identity)).IsAuthenticated;

Приложение продолжит работу, если его аутентифицированный пользователь.

Для случая 2 заявка: Предоставляет страницу, которая запрашивает имя домена, идентификатор пользователя и пароль. Проверяет, существует ли пользователь в активном каталоге; Ниже приведен фрагмент кода.

DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(SAMAccountName=" + username + ")";
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();

Приложение продолжает работу, если находит запись пользователя.

Обратите внимание, что это включает в себя изменения, рекомендованные в файле web.config, например следующий фрагмент:

<authentication mode="Forms">
  <forms  loginUrl="~/UI/Pages/Login.aspx" defaultUrl="Default.aspx"  name="adAuthCookie" timeout="60" path="/" />
</authentication>

<authorization>
  <deny users="?"/>
  <allow users="*"/>
</authorization>
<identity impersonate="true"/>

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

1 Ответ

0 голосов
/ 11 ноября 2010

Мне пришлось исследовать это несколько месяцев назад, и я нашел отличную статью о том, как сочетать формы и безопасность Windows в ASP.NET. У меня никогда не было возможности реализовать это, поэтому я не уверен в реальных результатах. Если вы используете что-то из этого, пожалуйста, дайте мне знать, как это работает для вас.

Смешивание форм и безопасность Windows в ASP.NET

...