Доступ запрещен с помощью MSXML

Это не могло бы быть идеальным решением для Вас, но это могло бы все еще стоить упомянуть.

Snapsie является открытым исходным кодом, объект ActiveX, который позволяет снимкам экрана Internet Explorer быть полученными и сохраненными. , Как только файл DLL регистрируется на клиенте, необходимо быть в состоянии получить снимок экрана и загрузить файл на скручивание жгутов сервера JavaScript. Недостатки: это должно зарегистрировать файл DLL в клиенте и работает только с Internet  Проводник.

5
задан Ryan 30 July 2009 в 14:24
поделиться

3 ответа

Я полагаю, вы полагаетесь на лежащий в основе HTTP-стек WinINET для представления учетных данных текущих пользователей серверу, когда сервер запрашивает их с помощью встроенной безопасности Windows.

WinINET будет делать это только по умолчанию если он считает, что хост-сервер находится в зоне интрасети. Даже в этом случае возможно, что настройки безопасности зоны интрасети пользователя были настроены таким образом, чтобы это не разрешалось.

Попробуйте посетить сайт с помощью браузера с клиентской машины, когда вы вошли в систему как тот же пользователь, от имени которого работает ваше приложение VB6. В какой зоне он считает сервер? Если это не интрасеть, вам нужно будет добавить хост в список сайтов, принадлежащих зоне. Пока вы там, откройте настройки безопасности зон и прокрутите вниз до категории User Authentication. Вход должен быть настроен как " Есть один ответ 401? WinINET не использует учетные данные пользователя? Есть 3 401 отклик? WinINET попытался использовать учетные данные текущего пользователя, но они не принимаются сервером.

На данный момент мы находимся на территории системного администратора. Например, если трассировка скрипта показывает, что попытка аутентификации не использует NTLM, тогда используется аутентификация Kerberos, убедитесь, что сервер и клиент имеют часы, установленные в пределах 5 минут друг от друга и контроллера домена.

Проверьте событие серверов. log, сервер не может связаться с контроллером домена.

Разместите простой .htm на сервере только со встроенной системой безопасности Windows и попытайтесь открыть его из браузера. Успешно?

Например, если трассировка скрипта показывает, что попытка аутентификации не использует NTLM, тогда используется аутентификация Kerberos, убедитесь, что сервер и клиент имеют часы, установленные в пределах 5 минут друг от друга и контроллера домена.

Проверьте событие серверов. log, сервер не может связаться с контроллером домена.

Разместите простой .htm на сервере только со встроенной системой безопасности Windows и попытайтесь открыть его из браузера. Успешно?

Например, если трассировка скрипта показывает, что попытка аутентификации не использует NTLM, тогда используется аутентификация Kerberos, убедитесь, что сервер и клиент имеют часы, установленные в пределах 5 минут друг от друга и контроллера домена.

Проверьте событие серверов. log, сервер не может связаться с контроллером домена.

Разместите простой .htm на сервере только со встроенной системой безопасности Windows и попытайтесь открыть его из браузера. Успешно?

3
ответ дан 14 December 2019 в 13:43
поделиться

Посмотрев на все, что предложил AnthonyWJones, я обнаружил, что могу использовать базовую аутентификацию, выполнив:

 objXmlHttp.Open "POST", AsmxUrl, False, UserName, Password

Если бы я разрешил интегрированную безопасность, он бы попытался согласовать, но затем потерпел неудачу и 401, но если разрешена только базовая аутентификация, он будет подключаться. Это не мой первый выбор, но это лучший обходной путь, чем разрешение анонимного доступа. Я оставлю это открытым на некоторое время, на случай, если кто-то может объяснить, как заставить интегрированную безопасность работать, но затем дам AnthonyWJones принятый ответ, поскольку его контрольный список хорош и побудил меня найти этот другой вариант.

Fiddler очень помог в этом. выяснение всего этого.

0
ответ дан 14 December 2019 в 13:43
поделиться

Вероятно, уже слишком поздно отвечать Райану, но у других может быть такая же проблема, поэтому я отправлю это: У меня есть разработчик, который сталкивается с той же проблемой с MSXML2. XMLHTTP. Дело в том, что у меня есть образцы, которые делают это с давних пор, поэтому я знаю, что он использовал для работы, но сейчас это не так ... может быть, недавно появилась ошибка? Мы полагались на автоматическое обнаружение локальной интрасети стеком WinINET, и тогда стек будет готов выполнить интеграцию с Windows. Сайт был в списке обхода прокси, который с параметрами по умолчанию помещает его в локальную интрасеть. И действительно, когда вы переходите на сайт и переходите на вкладку настроек безопасности, вы видите, что локальная интрасеть выделена, поэтому кажется, что она работает. Однако MSXML2.XMLHTTP по-прежнему не желает интегрировать Windows ... Если только вы напрямую добавляете сайт в локальную интрасеть с помощью кнопок «Сайты / Дополнительно» на вкладке «Безопасность».

Итак, я пришел к выводу, что теперь в стеке WinINET есть какая-то ошибка, которая обрабатывает автоматически обнаруженные сайты локальной интрасети иначе, чем добавленные напрямую в список Сайтов. Забавно то, что когда просматривает сайт, все работает, как и ожидалось, и Windows Integrated используется автоматически (даже без прямого добавления на сайты): это только программный доступ через MSXML2. XMLHTTP, который не работает.

Наконец, это не то, что мы закончили делать: вместо этого мы использовали MSXML2.ServerXMLHTTP.6.0. Этот стек (WinHTTP), похоже, все делает правильно, однако есть предостережение: он не использует настройки прокси IE по умолчанию, и поэтому у вас есть несколько вариантов - используйте ProxyCfg (для XP и более ранних версий) или NETSH для Vista и более поздних версий, чтобы импортировать настройки прокси IE в стек WinHTTP. Обратной стороной этого является дополнительная настройка на каждом клиентском компьютере (это было приложение VB для толстого клиента). Вместо этого мы решили поместить следующее непосредственно перед отправкой:

HTTP.SetProxy 2, «myproxy.mydomain.com», «* .mydomain.com»

Поскольку вы перейдете к mydomain site, вы можете подумать, что вместо этого можете сказать HTTP.SetProxy 0, чтобы обойти прокси, но это не работает. Стеку нужно сообщить: «У меня есть прокси-сервер, но я не буду использовать его для моего домена, и, кстати, сайт, на который я собираюсь перейти, находится в этом домене, следовательно, это локальная интрасеть».

Обратной стороной этого является дополнительная настройка на каждом клиентском компьютере (это было приложение VB для толстого клиента). Вместо этого мы решили поместить следующее непосредственно перед отправкой:

HTTP.SetProxy 2, «myproxy.mydomain.com», «* .mydomain.com»

Поскольку вы перейдете к mydomain site, вы можете подумать, что вместо этого можете сказать HTTP.SetProxy 0, чтобы обойти прокси, но это не работает. Стеку нужно сообщить: «У меня есть прокси-сервер, но я не буду использовать его для моего домена, и, кстати, сайт, на который я собираюсь перейти, находится в этом домене, следовательно, это локальная интрасеть».

Обратной стороной этого является дополнительная настройка на каждом клиентском компьютере (это было приложение VB для толстого клиента). Вместо этого мы решили поместить следующее непосредственно перед отправкой:

HTTP.SetProxy 2, «myproxy.mydomain.com», «* .mydomain.com»

Поскольку вы перейдете к mydomain site, вы можете подумать, что вместо этого можете сказать HTTP.SetProxy 0, чтобы обойти прокси, но это не работает. Стеку нужно сообщить: «У меня есть прокси-сервер, но я не буду использовать его для моего домена, и, кстати, сайт, на который я собираюсь перейти, находится в этом домене, следовательно, это локальная интрасеть».

вы можете подумать, что вместо этого можете сказать HTTP.SetProxy 0, чтобы обойти прокси, но это не сработает. Стеку нужно сообщить: «У меня есть прокси-сервер, но я не буду использовать его для моего домена, и, кстати, сайт, на который я собираюсь перейти, находится в этом домене, следовательно, это локальная интрасеть».

вы можете подумать, что вместо этого можете сказать HTTP.SetProxy 0, чтобы обойти прокси, но это не сработает. Стеку нужно сообщить: «У меня есть прокси-сервер, но я не буду использовать его для моего домена, и, кстати, сайт, на который я собираюсь перейти, находится в этом домене, следовательно, это локальная интрасеть».

3
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: