401 Client 'Verhandeln', Server 'Negotiate,NTLM" Beim Aufruf von WCF-Server zu Server

Ok, ich habe gelesen, jeder thread & Frage, die ich finden kann mit diesem Fehler und erstaunlicherweise noch keine Lösung gefunden habe. Ich versuche erfordern, um die Windows-Authentifizierung auf meinem IIS gehosteten WCF-Dienst (.NET 4.0), die, bis jetzt, hat bisher optional. Ich habe eine Windows-Authentifizierung aktiviert ist Endpunkt auf dem server verfügbar, für eine Weile mit mehreren remote-Anwendungen erfolgreich. Ich bin jetzt versuchen zu wechseln, unsere web-Anwendungen und an andere server-apps, die den WCF-Dienst über diesem gesicherten Endpunkt, indem Sie Ihnen die genau die gleiche client-Konfiguration, wie das arbeiten von remote-clients, sondern der server-apps erhalten ein 401 mit der Meldung:

The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate,NTLM'.]

Habe ich Anonyme und Windows-Authentifizierung aktiviert ist für den WCF-hosting-Website. Die web-Anwendung, mit der ich begonnen habe, mit gehostet wird, die auf einem anderen server als WCF-Dienst und läuft ASP.NET 2.0 und Windows Server 2008 R2 Enterprise. Ich habe beide erstellt ein client-Verhalten mit allowNtlm und legen Sie die Netzwerksicherheit: LAN Manager-Authentifizierungsebene auf Send LM & NTLM... auf der client-Seite. Auf dem Host-Ende, es ist Nur NTLMv2-Antworten Senden...ich weiß nicht, ob das beeinflusst, wie der server/Dienst übernimmt die Authentifizierung. Ich habe auch versucht die Einstellung allowedImpersonationLevel, um Identitätswechsel auf dem client, die, zum Glück, nicht funktioniert hat (weil Identitätswechsel sollte nicht nötig sein). Wir scheinen das gleiche Ergebnis zu erhalten für eine Windows-Dienst-und Konsolen-app, die auf dem gleichen server wie der web-app.

Hier ist meine server config:

<binding name="WindowsSecuredBinding">
    <security mode="Transport">
        <transport clientCredentialType="Windows" />
    </security>
</binding>
...
<service behaviorConfiguration="OMWebServices.QueueServiceBehavior"
    name="OMWebServices.QueueService">
    <endpoint address="" binding="basicHttpBinding" name="QueueEndpoint"
      bindingName="" contract="OMWebServices.IQueueService" />
    <endpoint binding="basicHttpBinding" bindingConfiguration="WindowsSecuredBinding"
      name="QueueSecuredEndpoint" contract="OMWebServices.IQueueService" />
    <endpoint address="mex" binding="mexHttpBinding" name="QueueMetadataEndpoint"
      contract="IMetadataExchange" />
  </service>
...
<behavior name="OMWebServices.QueueServiceBehavior">
    <serviceMetadata httpGetEnabled="true" />
    <serviceDebug includeExceptionDetailInFaults="true" />
</behavior>

Und hier die client config:

<endpoint address="https://.../QueueService.svc" binding="basicHttpBinding" bindingConfiguration="QueueSecuredEndpoint" behaviorConfiguration="OMServiceBehavior" contract="OMQueueService.IQueueService" name="QueueSecuredEndpoint" />

<binding name="QueueSecuredEndpoint" 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="Windows" proxyCredentialType="None" realm="" />
    <message clientCredentialType="UserName" algorithmSuite="Default" />
  </security>
</binding>
....
<!-- The behavior I tried that didn't make a difference -->
<behavior name="OMServiceBehavior">
  <clientCredentials>
    <windows allowedImpersonationLevel="Impersonation" allowNtlm="True"/>
  </clientCredentials>
</behavior>

Meine erste Frage ist, was ist diese Fehlermeldung wirklich sagen mir? Es sagt dem client-Schema ist zu Verhandeln, und der server antwortet mit Negotiate,NTLM. Wenn der server bietet Verhandeln und und client Verhandeln, was ist das problem?

Zweite Frage ist natürlich, was ist falsch und wie mache ich das?

BEARBEITEN

Gut, das ist dumm. Das problem scheint zu sein, es werden keine Anmeldeinformationen übergeben werden. Weg zurück, wenn die web-site wurde in der Entwicklung, ich begann zu schreiben code, der explizit die Anmeldeinformationen im code, sondern in den Prozess, festgestellt, dass es bereits ohne das explizite setzen Sie. So, der code geblieben ist auskommentiert. Dies war unter IIS 6. Jetzt läuft auf IIS 7, es scheint nur zu funktionieren, wenn ich explizit festlegen der Anmeldeinformationen in meinem code. Bekomme ich automatisch über den w3wp-Prozess " Konto?

InformationsquelleAutor xr280xr | 2014-03-17
Schreibe einen Kommentar