2010-01-27 1 views
2

У меня есть веб-часть, которая сильно использует javascript в реализации пользовательского интерфейса. Он также использует асинхронные запросы XmlHttpRequest для некоторых веб-сервисов SharePoint (я использую SPServices, кстати).ajax post для веб-служб SharePoint, прерванных проблемами ntlm

Для некоторых запросов пользователь сталкивается с проблемами проверки подлинности NTLM, и после ввода учетных данных запрос завершается. Это происходит 3 раза при загрузке одной страницы, хотя есть более трех запросов. Есть несколько вещей, которые по этому поводу, что я нахожу в заблуждение:

  • , как я уже говорил, не все запросы имеют эту проблему
  • пользователь уже получил доступ к сайту с проверкой подлинности NTLM, так почему Аякса запросы получить оспорено?
  • Это в среде Windows. В среде, не относящейся к домену, эта проблема не существует (хотя Windows auth используется в обоих случаях).

Конечно, все это в IE. Одна вещь, которую я пробовал, - это вставить заголовок аутентификации NTLM в запрос ajax, но это ничего не изменило (я действительно не думал, что это будет, но стоит попробовать).

Любые предложения?

ответ

1

Этого не должно быть. Аутентификация Windows выполняется для каждого процесса и, если вы уже прошли проверку подлинности, вы остаетесь аутентифицированной при повторной загрузке, не имеет значения, является ли это основным соединением браузера или запросом XHR.

Я видел это странное поведение на одном из наших тестовых серверов. В этом случае также был нарушен доступ к WebDAV для SharePoint, и несколько раз вы не могли получить доступ к путям \\sharepointserver\sites\somesite (но через несколько минут вы могли бы сделать это снова). Казалось, что в этом случае было некорректно с аутентификацией Kerberos, и иногда были выпущены неправильные токены. Однако мы этого не решили, просто установили новый сервер и подключили к нему базы данных контента. Это сработало :-)

+0

Да - я не понял, как это сделать, но скорее удалил этот конкретный вызов веб-службе. Вероятно, это было вызвано неправильной конфигурацией Kerberos, но я, возможно, никогда не знаю :-) –

0

Эта проблема связана с таймаутом сеанса HTTP1.1. Когда вы впервые входите на свой аутентифицированный сайт NTLM, сеанс HTTP открыт. Этот сеанс аутентифицируется, и каждый запрос, который вы сделали, пока этот сеанс открыт, будет автоматически аутентифицирован с помощью токена NTLM сеанса. Теперь, когда вы создаете XmlHttpRequest, если сеанс HTTP по-прежнему открыт, ваш запрос не запрашивает никакой аутентификации, поскольку он уже установлен. Но если сеанс истекает или закрывается так или иначе. Затем вам будет предложено ввести loggin. Чтобы лучше понять, что просто выполните быстрый поиск протокола HTTP1.1, и вы лучше поймете, о чем я говорю.

1

Internet Explorer запоминает, если он имеет NTLM-аутентификацию для данного сайта. Если его когда-либо запрашивают POST на этом сайте, он ожидает, что сайт повторно проверит его. Если сайт не работает, браузер не будет отправлять какие-либо детали в теле сообщения.