Автоматическая проверка подлинности Windows в общедоступном домене?

#c# #asp.net-core #asp.net-core-mvc #windows-authentication #asp.net-core-2.2

#c# #asp.net-core #asp.net-core-mvc #windows-проверка подлинности #asp.net-core-2.2

Вопрос:

Я разрабатываю Asp.NET Основное веб-приложение, и я включил в нем проверку подлинности Windows, следуя официальному руководству Microsoft:

https://learn.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.2amp;tabs=visual-studio

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

  • Если я получу доступ, используя имя компьютера в адресе (пример:https://devmachine01 / ) браузер автоматически входит в систему, и я аутентифицируюсь, без каких-либо действий, требуемых со стороны пользователя
  • Если я получу доступ, используя имя общедоступного домена компьютера (пример:https://mypublicwebsite.com ) браузер просит меня ввести мои учетные данные Windows, как на изображении ниже: введите описание изображения здесь

Мои вопросы на данный момент:

  1. есть ли способ заставить браузер автоматически входить в систему, даже если я обращаюсь к общедоступному домену вместо имени компьютера? (очевидно, я ожидаю, что это сработает автоматически, только если компьютер, на котором запущен браузер, зарегистрирован в домене)
  2. если ответ на первый вопрос отрицательный, могу ли я хотя бы настроить свой Asp.NET Основное веб-приложение, чтобы оно запоминало пользователя, поэтому пользователю нужно войти в систему только один раз (с помощью cookie или аналогичного механизма)? Согласно инструкциям, приведенным в статье, на которую я ссылался выше, пользователю приходится повторно вводить свои учетные данные каждый раз, когда он закрывает и вновь открывает браузер, что не является самым удобным.

Комментарии:

1. Обычно сервер должен верить своей части локального / доверенного

2. @BugFinder: извините, но не могли бы вы немного подробнее рассказать об этом? Простите меня, но я новичок в этом методе проверки подлинности, и я не совсем уверен, о чем вы говорите … вы хотите сказать, что это зависит от того, как настроен сервер? Вы имеете в виду компьютер или мое веб-приложение?

3. Это настройки браузера, а не что-либо еще.

Ответ №1:

Проверка подлинности Windows, схема аутентификации, которая позволяет автоматический вход в систему, основана на всем, что принадлежит одному домену: поставщику удостоверений (AD), веб-серверу и клиенту (локальному компьютеру). Общедоступный веб-сайт, по определению, не является частью домена, и, следовательно, Windows Auth (или, по крайней мере, его функциональность автоматического входа в систему) не может функционировать в такой среде.

Технически вы все еще можете использовать Windows Auth или AD в целом. Azure Active Directory, например, предназначена для работы в распределенных средах. Однако вы должны пройти проверку подлинности вручную (либо с помощью традиционного имени пользователя и пароля, либо с помощью потока OAuth). У вас не может быть автоматического входа на общедоступный веб-сайт.

Редактировать

Извините, я изначально недостаточно внимательно прочитал ваш вопрос. Хотя это не меняет мой ответ, он содержит немного больше объяснений. Хотя технически машина находится в домене, ее внешний фасад нет. Вот почему доступ к нему через hostname работает, а через реальный веб-домен — нет. Тем не менее, вы абсолютно безумны, предоставляя доступ компьютеру в вашем домене к Интернету в целом. Даже если бы вы могли заставить это работать, риск безопасности дыры, которую вы открываете, намного превосходит простую тонкость, такую как автоматический вход в систему. Ваша внутренняя сеть должна быть внутренней, и вам следует немедленно удалить этот компьютер из домена.

Комментарии:

1. Спасибо за ваш ответ, очень информативный. Машина еще не открыта, мы все еще оцениваем лучшее решение для этого. После вашего предупреждения, я думаю, мы, вероятно, выберем решение, при котором только компьютеры во внутренней сети (физически или виртуально через VPN) будут иметь доступ к серверу.