У меня есть 2 сайта sharepoint, на которых установлена одна установка sharepoint. На одном сайте включена поддержка утвержденных утверждений, а у другой - классическая аутентификация. Оба сайта также используют Kerberos.Признаки на основе Sharepoint против классической аутентификации
Я использую ManifoldCF для подключения к этим сайтам, чтобы извлечь весь контент, а также разрешения. Разъем ManifoldCF соединяется с сайтом с включенным классическим auth и работает, как ожидалось. Тем не менее, попытка сканирования сайта, основанного на требованиях, генерирует несанкционированную ошибку 401.
Существует пакет веб-сервисов, поставляемый с ManifoldCF, к которому обращается имя MCPermissions.asmx. Этот файл содержит следующий блок кода, который устанавливает учетные данные пользователя:
try
{
// Only handle requests for "item". Send all other requests to the SharePoint web service.
if (objectType.Equals(itemType))
{
retVal = GetItemPermissions(objectName);
}
else
{
ServicePointManager.ServerCertificateValidationCallback +=
new RemoteCertificateValidationCallback(ValidateCertificate);
using (SPPermissionsService.Permissions service = new SPPermissionsService.Permissions())
{
service.Url = SPContext.Current.Web.Url + "/_vti_bin/Permissions.asmx";
service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
retVal = service.GetPermissionCollection(objectName, objectType);
}
}
}
catch (SoapException soapEx)
{
throw soapEx;
}
catch (Exception ex)
{
SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("MCPermissions.asmx", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, "Error: "+ex.Message+"; SPContext.Current.Web.Url='"+SPContext.Current.Web.Url+"'", ex.StackTrace);
throw RaiseException(ex.Message, "1000", ex.Source);
}
Этот код доступен через ManifoldCF правильно, но, кажется, его запрос сделал в плагине для /_vti_bin/Permissions.asmx, что является причиной 401 выпуск.
Я попытался установить предварительно определенные учетные данные в приведенном выше коде, используя NetworkCredential («имя пользователя», «пароль», «домен»), но не повезло.
Пример:
string webUrl = SPContext.Current.Web.Url;
NetworkCredential myCredentials = new NetworkCredential("DOMAIN\\user", "mypassword", "DOMAIN");
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(webUrl), "Negotiate", myCredentials);
service.Url = webUrl + "/_vti_bin/Permissions.asmx";
service.Credentials = credCache;
С претензиями проверки подлинности на основе имени пользователя, что я вхожу в ManfoldCF или аутентификации браузера получает изменен из обычного \ формата в формат претензии имени пользователя (например, я: 0 #. ж || /).
Кто-нибудь знает, почему претензии, основанные, будут вызывать проблему 401, где классическая аутентификация отсутствует?