.NET MVC Authentication - Forms + Аутентификация Windows

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

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

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

Мои мысли вначале были простыми, пусть IIS пытается и аутентифицируется с помощью проверки подлинности Windows, и если он не работает (401), перенаправляется на страницу входа. В настоящее время у меня нет среды для тестирования, но из моего понимания в IIS7 это не так просто и требует немного "взлома" для выполнения. Мне нужно избегать чего-то подобного. Мне нужно решение, которое работает, поскольку система была разработана для работы, а не путем обмана.

Я просмотрел ADFS и WIF, но ADFS поддерживает только AD, а не SQL, и из того, что я видел, нет STS, поддерживающего SQL Server. Я предполагал разместить как внутреннее приложение, использующее проверку подлинности Windows, так и внешнее приложение, использующее проверку подлинности форм, но я хочу избежать этого, если это возможно.

В идеале поток, который мы хотим, является пользователем, который переходит в приложение MVC. IIS пытается выполнить проверку подлинности Windows, если он не работает (401), перенаправляет их на страницу входа в систему. Оттуда страница входа в систему будет аутентифицировать учетные данные пользователя в базе данных SQL. Каков наилучший способ выполнить все это в рамках приложения 1 MVC?

Спасибо!

Ответ 1

Я бы просто выполнил свою собственную аутентификацию поверх FormsAuthentication или OWIN, если вы используете ASP.NET MVC 5. Это действительно просто, и у вас будет полный контроль над тем, куда вы идете, чтобы аутентифицировать пользователей. Поверьте мне, это не так страшно, как кажется. Я написал несколько сообщений об этом, что вы можете найти интересные.

MVC 5

http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown-part-deux

MVC 4

http://tech.pro/tutorial/1216/implementing-custom-authentication-for-aspnet

В настоящее время я использую метод MVC 4 для успешной аутентификации с доменом Active Directory. Единственное, что я бы рекомендовал, - это кэшировать свои вызовы в Active Directory, поскольку это может быть ненадежным время от времени.

Ответ 2

Существует STS, поддерживающий сервер sql, это IdentityServer.

https://github.com/thinktecture/Thinktecture.IdentityServer.v2

Он даже поддерживает настраиваемые поставщики членства, которые дают вам множество разных возможностей. Однако я не уверен, что если он поддерживает автоматическое резервное копирование форм, когда завершена интегральная проверка подлинности. Если нет, существует два варианта: пользовательский sts или два явных элемента и явный выбор для пользователей. Мы реализовали последний сценарий один раз с помощью ADFS - было два adfses, один с Forms, другой с интегрированным auth, первый из которых был объединен с другим. Это дает явный выбор на странице поиска домашней реальности - ".если бы вы хотели войти в систему с именем пользователя/паролем или попробовать встроенную проверку подлинности"

Ответ 3

Вы можете создать проект, который использует "Аутентификацию на местах", который использует ADFS для аутентификации пользователей. Внутренний полномочный URI будет:

https://yourADFSservername/federationmetadata/2007-06/federationmetadata.xml

После загрузки проекта вы можете перейти к настройкам ADFS и создать новый "Trust of Party Trust" и передать URL-адрес HTTPS, который будет использоваться вашим приложением MVC. Установите для использования атрибутов LDAP в качестве претензий и которые будут легко сортировать аутентификацию AD, поскольку она будет перемещать пользователей на страницу входа в систему, такую ​​как Office 365. Затем, если аутентификация не работает для определенных пользователей, попросите пользователя отправить пользователя в обычную подпись, in/signup, которая существует независимо от AD и подключена к SQL-серверу. Вы можете пропустить проверку подлинности Windows, используя локальную аутентификацию.