Die HTTP-Anfrage ist mit dem Client-Authentifizierungsschema 'Ntlm' nicht autorisiert. Der vom Server empfangene Authentifizierungs-Header war 'NTLM'.
Ich weiß, es gibt viele Fragen, die SO ähnlich wie diese, aber ich konnte nicht finden eine für dieses bestimmte Problem.
Ein paar Punkte, Erstens:
- Ich habe keine Kontrolle über unsere Sharepoint-server. Ich kann nicht zwicken IIS-Einstellungen.
- Ich glaube, dass unsere server, IIS-version IIS 7.0.
- Unsere Sharepoint-Server erwartet Anfragen per NTLM.
- Unsere Sharepoint-Server in der gleichen Domäne wie meine client-computer.
- Ich bin mit .NET Framework 3.5, Visual Studio 2008
Ich bin versucht zu schreiben, eine einfache Konsolen-app zu manipulieren, um Sharepoint-Daten mithilfe der Sharepoint-Web-Services. Ich habe die Service-Referenz, und das folgende ist meine app.config:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="ListsSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://subdomain.companysite.com/subsite/_vti_bin/Lists.asmx"
binding="basicHttpBinding" bindingConfiguration="ListsSoap"
contract="ServiceReference1.ListsSoap" name="ListsSoap" />
</client>
</system.serviceModel>
Dies ist mein code:
static void Main(string[] args)
{
using (var client = new ListsSoapClient())
{
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential("username", "password", "domain");
client.GetListCollection();
}
}
Wenn ich Anrufe, GetListCollection(), die folgenden MessageSecurityException erhält geworfen:
The HTTP request is unauthorized with client authentication scheme 'Ntlm'.
The authentication header received from the server was 'NTLM'.
Mit einer inneren WebException:
"The remote server returned an error: (401) Unauthorized."
Ich habe versucht, verschiedene Bindungen und verschiedene code-Optimierungen, um zu versuchen, sich zu authentifizieren, richtig, aber ohne Erfolg. Ich werde eine Liste derjenigen, die weniger.
Ich habe versucht, die folgenden Schritte:
Mit einem nativen Win32-Imitator vor dem erstellen der client -
using (new Impersonator.Impersonator("username", "password", "domain"))
using (var client = new ListsSoapClient())
{
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential("dpincas", "password", "domain");
client.GetListCollection();
}
Diese produziert die gleiche Fehlermeldung.
Einstellung TokenImpersonationLevel für meine client-Anmeldeinformationen
using (var client = new ListsSoapClient())
{
client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
client.GetListCollection();
}
Diese produziert die gleiche Fehlermeldung.
Mit security mode=TransportCredentialOnly
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" />
</security>
Dies führte zu einer anderen Fehlermeldung:
The provided URI scheme 'https' is invalid; expected 'http'.
Parameter name: via
Allerdings brauche ich für die Verwendung von https, also kann ich nicht ändern, meine URI-Schema.
Ich habe versucht, einige andere Kombinationen, ich kann mich nicht erinnern, aber ich poste Sie wenn ich. Ich bin echt mit Latein am Ende, hier. Ich sehe eine Menge von links auf Google, die sagen, "wechseln Sie auf Kerberos", aber mein server scheint nur akzeptieren NTLM, nicht "Aushandeln" (wie er sagen würde, wenn er war auf der Suche für Kerberos), das ist also leider keine option.
Jede Hilfe, draußen, Leute?
InformationsquelleAutor der Frage Pandincus | 2010-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Visual Studio 2005
http://servername/sites/SiteCollection/SubSite/_vti_bin/Lists.asmx
ListsWebService
Hier ist der code.
Visual Studio 2008
http://servername/sites/SiteCollection/SubSite/_vti_bin/Lists.asmx
Ändern Sie Ihre app.config-Datei von:
:
Ändern Ihr Programm.cs-Datei und fügen Sie folgenden code in deiner Main-Funktion:
Fügen Sie den using-Anweisungen:
Referenz: http://sharepointmagazine.net/technical/development/writing-caml-queries-for-retrieving-list-items-from-a-sharepoint-list
InformationsquelleAutor der Antwort Kit Menke
Nach einer Menge von Versuch und Irrtum, gefolgt von einer stagnierenden Phase, während ich wartete auf eine Gelegenheit, sprechen Sie mit unseren server-Jungs, hatte ich endlich eine chance um das problem zu besprechen, mit Ihnen und fragte Sie, ob Sie hätte nichts dagegen wechseln unserer Sharepoint-Authentifizierung über Kerberos.
Zu meiner überraschung, Sie sagte das wäre kein problem und war in der Tat einfach zu tun. Sie aktiviert die Kerberos - und ich meine modifizierten app.config wie folgt:
Referenz, meine volle serviceModel Eintrag in mein app.config sieht wie folgt aus:
Danach alles funktionierte wie ein Charme. Ich kann jetzt (endlich!) nutzen Sie Sharepoint Web Services. Also, wenn jemand da draußen können nicht Ihre Sharepoint Web Services mit NTLM, sehen Sie, wenn Sie überzeugen können die Systemadministratoren die Umstellung auf Kerberos.
InformationsquelleAutor der Antwort Pandincus
Nach vielen Antworten, dass hat nicht funktioniert, habe ich endlich eine Lösung gefunden, wenn der Anonyme Zugriff Deaktiviert ist, auf dem IIS-server. Unser server ist die Windows-Authentifizierung verwenden, nicht Kerberos. Zu verdanken ist dies dieses blog-posting.
Keine änderungen gemacht wurden, ins web.config.
Auf der server-Seite, die .SVC-Datei in den Ordner ISAPI verwendet MultipleBaseAddressBasicHttpBindingservicehostfactory
Die Attribute der Klasse und der service sind:
Auf der client-Seite, der Schlüssel, der es zu arbeiten, war der http-Bindung der Sicherheitsattribute:
Ich hoffe, das funktioniert für Sie!
InformationsquelleAutor der Antwort David Anderson
Wenn ich mich Recht erinnere, gibt es einige Probleme mit dem hinzufügen von SharePoint web services als VS2K8 "Service Reference". Man muss hinzufügen, es wie ein old-style "Web Reference", um richtig zu arbeiten.
InformationsquelleAutor der Antwort Jesse C. Slicer