我有2個SharePoint站點耗盡一個SharePoint安裝。一個網站啓用了聲明,另一個啓用了經典認證。這兩個站點也都使用Kerberos。基於Sharepoint聲明與經典身份驗證
我正在使用ManifoldCF連接到這些網站以提取所有內容以及權限。 ManifoldCF連接器使用經典認證連接到站點,並按預期工作。但是,嘗試抓取基於聲明的網站會生成401未經授權的錯誤。
有一個與ManifoldCF一起提供的Web服務程序包,可以訪問它,名爲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 (「username」,「password」,「domain」)設置上面代碼中的預定義憑據,但沒有運氣。
實施例:
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或在瀏覽器中的認證被從常規\格式權利要求用戶名格式改變(例如I:0#。瓦特|| /)。
有沒有人知道爲什麼索賠會導致經典認證沒有的401問題?