Классический Запрос ASP. ServerVariables ("LOGON_USER") возвращает неверное имя пользователя. Вот сценарий:
У меня есть две учетных записи на домене, один для администрирования и один для нормальной эксплуатации. Администраторская учетная запись установлена как администратор (в Группе администраторов) на сервере, где сценарий ASP работает. Сервер является Windows 2003 рабочий IIS 6.0.
Я вхожу в систему своей машины с моим обычным пользователем, считают и переходят к странице, и она возвращает мое администраторское имя пользователя учетной записи. Почему это происходит? Это хорошо работает для других.
<%
Response.Write "LOGON_USER: " & Request.ServerVariables("LOGON_USER") & "<br>"
Response.Write "REMOTE_USER: " & Request.ServerVariables("REMOTE_USER") & "<br>"
Response.Write "AUTH_USER: " & Request.ServerVariables("AUTH_USER") & "<br>"
Response.Write "<br>"
'Show all server variables
For Each Item In Request.ServerVariables
Response.Write Item & " = " & Request.ServerVariables(Item) & "<br>"
Next
%>
Анонимный доступ выключен, и аутентификация Windows идет.
Спасибо,
Jari
IIS, вероятно, работает под управлением пользователь Admin, и вы получаете это имя. Пожалуйста, проверьте это на своей стороне.
Я не могу объяснить, что вы видите, на основе предоставленной на данный момент информации. Я могу сказать вам, что учетная запись, под которой работает пул приложений, не имеет значения.
Классический ASP всегда олицетворяет пользователя либо анонимную учетную запись пользователя, либо пользователя, связанного с подключением, по которому поступает запрос. В этом может быть ключ к разгадке вашей проблемы.
Аутентификация в ASP выполняется на уровне соединения, после того как соединение было аутентифицировано, оно связывается с пользователем. Соединение может оставаться открытым для клиентов и других нисходящих HTTP-устройств. Все последующие запросы, поступающие по соединению, не нуждаются в повторной аутентификации, текущий пользователь, связанный с соединением, используется для предоставления пользовательского контекста, олицетворяемого потоком, обрабатывающим запрос.
Я видел, как промежуточные устройства или отладочные прокси (например, fiddler) поддерживали соединения и повторно использовали их для последующего запроса от множества клиентов. В этой ситуации возможно, чтобы клиент работал в контексте одного пользователя, чтобы запрос обрабатывался веб-сервером в контексте другого пользователя. Противный!
Я видел то же самое на старых серверах Citrix Terminal. HTTP-соединения использовались несколькими клиентами, работающими на сервере терминалов, что приводило к перекрестному контексту безопасности. Ой!
Другой вариант - отказ в доступе к ресурсу на сервере для текущего пользователя во внутренней сети. В браузере отображается диалоговое окно входа в сеть, и пользователь входит в систему с правами администратора. На время сеанса браузер теперь использует учетные данные администратора для доступа к другим ресурсам на том же сервере, даже если это сделает текущий вошедший в систему пользователь.
Согласно документации MSDN по этой переменной:
Учетная запись Windows, которую пользователь выдает себя за другое лицо при подключении к вашему веб-серверу. Используйте REMOTE_USER, UNMAPPED_REMOTE_USER или AUTH_USER для просмотра необработанного имени пользователя, содержащегося в заголовке запроса. Единственный раз, когда LOGON_USER имеет значение, отличное от этих других переменных, - это если у вас установлен фильтр аутентификации.
Возможно, у вас есть фильтр аутентификации.