вторник, января 20, 2009

Что-то странное…

Который день пытаюсь разгадать загадку (в идеале, найти пути обхода) по отсутствию доступа к данным на Шарепойнт-узлах с разрешённым анонимным доступом (!?).

Вот тестовая консольная программка:

using System;
using GetListDataWCF.Lists_WS; // proxy for Lists.asmx
using System.Net;
using System.Xml;

namespace GetListDataWCF {
class Program {
static void Main(string[] args) {
if (args.Length > 0)
new Test().GetData(args[0]);
else
Console.WriteLine(
"Usage:{0} <url of site>",
typeof(Test).Assembly.ManifestModule.Name);
}
}
class Test {
public void GetData(string url) {
Lists lists = new Lists();
lists.Url = url.TrimEnd("/".ToCharArray()) +
"/_vti_bin/Lists.asmx";
lists.Credentials = CredentialCache.DefaultCredentials;
XmlNode tst =null;
try {
tst = lists.GetListCollection();
Console.WriteLine(string.Format(
"success: {0} bytes", tst.OuterXml.Length));
} catch (Exception err) {
Console.WriteLine(
string.Format("error: {0}", err.Message));
}
}
}
}
Программа обращается в узлу, УРЛ которого передан через параметр командной строки, вызывает метод GetListCollection() сервиса Lists.asmx и в случае успеха выводит размер ответа сервиса (содержимое ответа в данном случае неважно). Скомпилированная программа – здесь. Собственно, сам алгоритм из SDK, используется у меня (с вариациями) в разных программах и до недавнего времени (по крайней мере, до сентября-октября 2008 г.) выполнялся успешно для всех узлов, на которых разрешён анонимный доступ к данным.
Сейчас же результат работы программы причудливым образом зависит от пользователя, запустившего программу, и, может быть, ещё от каких-то факторов. Чаще всего результатом бывает “error: Сбой запроса с состоянием HTTP 401: Unauthorized.”, в случае Forms-аутентификации - “403, forbidden”. Случаи успешного выполнения запросов редки. smile_omg При этом таким поведением “отличаются” только сайты WSS-3, сайты WSS-2 отдают данные, как и ожидается.
Для проверки можно использовать узлы с адресами
http://sharepoint-community.ru:55555/ (Win-аутентификация),
http://sharepoint-community.ru/ (Forms-аутентификация),
http://www.sharepointcommunity.com/ (Win-аутентификация),
http://new.hse.ru/sites/ibs_test/ (версия WSS-2).
На всех узлах разрешён анонимный доступ к данным, успешное выполнение тестовой программы наблюдается только на последнем узле.smile_eyeroll

Сильно похоже на результат “усовершенствования” в деле безопасности… thumbs_down


Technorati Tags:

5 комментариев:

Nisus комментирует...

Не ваш случай? http://support.microsoft.com/kb/943280

DkmS комментирует...

Не похоже. Одинаково не работает, что под Вистой, что под хр, что под Server 2003. Да и зависимость от версии Шарепойнта...

IP комментирует...

У меня похожая проблема, в WSS2 из Outlook2007 анонимные пользователи получают нормально списки, а в WSS3 вылетает окно windows авторизации, хотя через браузер открывает нормально.
Может кто в курсе?

DkmS комментирует...

Никто, похоже не знает - Вы первый, у кого проявляется.

Анонимный комментирует...

Не Ваш случай?

Windows Server 2003 SP1 introduced a loopback security check. This feature is obviously also present in Windows Server 2008. The feature prevents access to a web application using a fully qualified domain name (FQDN) if an attempt to access it takes place from a machine that hosts that application. The end result is a 401.1 Access Denied from the web server and a logon failure in the event log.

Unfortunately 401.1 is not really helpful as this error code means there is a problem with the user credentials. Of course, the HTTP spec doesn’t know about security features in a vendor’s implementation so there can’t be a HTTP error code for such a feature. This can lead to much banging of the head on the desk. It’s one of numerous causes of the 401.1 which are nothing to do with invalid credentials (e.g. attempting to use Kernel Mode Authentication with domain account in IIS7).

What this means is that when you browse a SharePoint Web Application which uses a fully qualified domain name from a WFE in the farm you will get a 401.1. This is very annoying on a development box, or when testing locally, or in other SharePoint specific scenarios (more on those later).