Я обновляю старое приложение веб-форм ASP .NET 3.5, которое использует проверку подлинности с помощью форм. Требование состоит в том, что он должен автоматически входить в систему аутентифицированных пользователей домена, в то же время позволяя внешним пользователям входить в систему вручную, как и раньше.
Для ясности: мне нужно узнать имя текущего пользователя, вошедшего в систему, если он находится в том же домене, что и сервер, и использовать эту информацию, чтобы обойти старую систему входа. Не все пользователи будут в сети.
Проблема, с которой я столкнулся, заключается в том, что, хотя я могу получить зарегистрированного пользователя из .NET Request.LogonUserIdentity, Я должен отключить анонимный доступ на соответствующих страницах, чтобы он заработал. Что случается, так это то, что любой, кто не распознается, получит запрос на вход в систему для входа в домен, но я не хочу этого, поскольку у некоторых пользователей нет учетных записей в домене.
Единственное решение, которое я могу придумать, - создать специальную страницу входа в систему для пользователей домена, которая автоматически перенаправляет их. Но было бы лучше, если бы они могли напрямую посещать любую страницу.
Сайт работает под управлением Windows Server 2003 R2 с IIS 6.0.
Спасибо.
Краткий ответ: нет. Если у вас не включена аутентификация Windows (и все другие методы аутентификации отключены), пользователи не будут аутентифицироваться в домене или на локальном компьютере ... и у вас не будет доступа к этой информации программно.
Длинный ответ тоже нет. Анонимная проверка подлинности переопределит проверку подлинности Windows, если они обе включены ... IIS пропустит другие методы проверки подлинности, если анонимный включен. Если проверка подлинности Windows включена (любой анонимный режим отключен) IIS отправит запрос Kerberos / NTLM, и только после этого (после запроса) браузер отправит учетные данные. Internet Explorer отправит информацию Kerberos без запроса, если он находится в зоне интрасети. -Крис
Я тоже исследовал это, ломал голову над тем, как заставить это работать, и, наконец, понял это. Так что я решил дать каждому свой способ сделать это. Это не чисто, но сработает. Этот процесс может быть реализован для других страниц и метода создания страниц.
Я создал страницу с помощью PHP с формой входа. Он использует LDAPS-соединение для аутентификации пользователей. Это нормально работает. Затем я решил проявить смелость и изменить его так, чтобы людям, которые уже находятся в домене, не приходилось входить в систему. Это нормально работает, читая поле учетных данных $ _SERVER ['REMOTE_USER'], но требует, чтобы я включил Проверка подлинности Windows. Это нормально и красиво, но полностью игнорирует мою форму входа, и есть несколько пользователей, которые отлаживают и тестируют пользователей и подрядчиков, которых мы не хотели добавлять в AD, поэтому они хранятся в базе данных MySQL. Без формы входа они не могут войти !! Кроме того, если пользователь использует Firefox, он все равно не передает учетные данные $ _SERVER ['REMOTE_USER'].
Чтобы исправить страницу входа, я скопировал страницу, добавив после нее _SSO (единый вход). Итак, теперь мое приложение - «www.mywebsite.com/testapp», будет «www.mywebsite.com/testapp_sso/». У одного будет проверка подлинности Windows, у другого - анонимный вход. Затем я использую IIS7 URL Rewrite, поэтому, когда они обращаются к testapp, и их IP-адрес, который равен $ _SERVER ['REMOTE_HOST'], находится в нашей подсети, он перезаписывает URL-адрес в папку _SSO.
На следующем шаге вы также можете добавить другое правило перенаправления URL-адресов для "firefox" _SERVER ["HTTP_USER_AGENT"]. Таким образом, это заставит всех, даже если они находятся в диапазоне IP, перейти на страницу, отличную от _SSO. Таким образом, даже если они находятся в нашей сети, пользователи Firefox по-прежнему видят старую добрую страницу входа в систему, которую видят все остальные, вместо всплывающего окна проверки подлинности Windows, которое ужасно.
Последний шаг - добавить маскировку URL-адреса, чтобы пользователи не знали, что они используют testapp_SSO или testapp.
Это все для пользователей. Но теперь каждый раз, когда вы хотите обновить одну страницу, вы также должны копировать ее в папку _SSO. Вы можете создать синхронизацию с помощью некоторого программного обеспечения для синхронизации, но вы также можете создать жесткую символическую ссылку! Все разрешения будут работать между двумя папками, и вам нужно будет обновить только одну.
Да, если бы это был Linux, было бы намного проще. Но здесь мы должны использовать IIS.
наверное этого решения нет в OOTB (из коробки).
У нас есть SharePoint 2010 в нашей среде, и при открытии через IE он не запрашивает учетные данные. Во всех остальных местах он запрашивает имя пользователя и пароль домена при каждом посещении. Я считаю, что если бы было какое-то решение, MS предоставила бы его вместе с SharePoint, поскольку это приглашение очень раздражает.
Раньше было аналогичное требование для одного проекта, который позже был переведен на проверку подлинности с помощью форм (на основе пересмотренных бизнес-правил). Теперь я ожидаю столкнуться с аналогичным требованием в ближайшем будущем, и я не видел ни одного рабочего образца для этого требования со времен прошлого сценария.
Помимо того, что я предлагаю пользователям использовать IE (для этого), мне сразу приходит в голову решение иметь плагин для браузера, который будет связываться с активным каталогом и обрабатывать эту проблему на бэкэнде. К сожалению, даже если это действительно так, большинство разработчиков, столкнувшихся с этой проблемой (включая меня), не могут пойти на это.