2015-06-11 5 views
5

Ich rufe zu einem SOAP-Dienst auf, der die Windows-Authentifizierung verwendet. Dies ist meine Konfiguration:Verhindern von Verhandlungshandshake bei nachfolgenden Serviceaufrufen

new BasicHttpBinding 
{ 
    Security = new BasicHttpSecurity 
    { 
     Mode = BasicHttpSecurityMode.TransportCredentialOnly, 
     Transport = new HttpTransportSecurity 
     { 
      ClientCredentialType = HttpClientCredentialType.Windows 
     } 
    }, 
}; 

Und ich bin die Anmeldeinformationen manuell hier einrichten, wenn der Benutzer auf einer anderen Domäne ist:

client.ClientCredentials.Windows.ClientCredential.Domain = "..."; 
client.ClientCredentials.Windows.ClientCredential.UserName = "..."; 
client.ClientCredentials.Windows.ClientCredential.Password = "..."; 

ich bemerkt habe, dass jeder Anruf ich durch die Client-Proxy ist in drei Reisen resultierende:

Request: POST /EndPoint (no auth) 
Response: 401 Unauthorized, WWW-Authenticate: Negotiate 

Request: POST /EndPoint, Authorization: Negotiate 
Response: 401 Unauthorized, WWW-Authenticate: Negotiate <gunk> 

Request: Post /EndPoint, Authorization: Negotiate <gunk> 
Response: 200 OK 

Wenn dies nur auf den ersten Anruf kam es nicht so schlimm wäre, aber es geschieht auf alle nachfolgenden Anrufe an die gleiche Client-Proxy-Instanz.

Der Server, den ich anrufe, ist nicht unter meiner Kontrolle und hat eine nicht unbedeutende Menge an Latenz, also würde ich gerne einen Weg finden, diese redundanten Reisen zu entfernen. Ist es möglich?

+0

ich denke, es versucht verschiedene Versionen der Verschlüsselung tls1.0, 1.1 usw. Sie können sie in einer bestimmten Reihenfolge festlegen. Es könnte auch ein serverseitiges Problem sein, es erwartet zuerst die höchste Form usw., aber das ist nur eine sehr vage Schätzung –

+0

@CoryNelson WCF-Dienst von IIS gehostet? –

Antwort

1

Ich habe gerade Dummy-Client mit WCF-Dienst mit Ihren Bindungseinstellungen und manuelle un + Pwd-Authentifizierung erstellt. Der WCF-Dienst ist so eingerichtet, dass er die Windows-Authentifizierung akzeptiert.

In meinem Fall werden jedoch alle nachfolgenden Anrufe automatisch authentifiziert.

Request: Post /Service1.svc 

Antwort 1:

HTTP/1.1 401 Unauthorized 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/7.5 
WWW-Authenticate: Negotiate 
WWW-Authenticate: NTLM 

Antwort 2:

HTTP/1.1 401 Unauthorized 
Content-Type: text/html; charset=us-ascii 
Server: Microsoft-HTTPAPI/2.0 
WWW-Authenticate: Negotiate xxxxxxxxxxxxxxxxxxxxxxxxxx..... 

Antwort 3:

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Length: 202 
Content-Type: text/xml; charset=utf-8 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
Persistent-Auth: true 
X-Powered-By: ASP.NET 
WWW-Authenticate: Negotiate xxxxxxx.... 

Im Antwort-Header habe ich Persistent-Auth: true. Ist das für dich dasselbe? Wenn nein, gibt es Einstellungen in IIS, die einen Client zwingen können, sich nach jeder Anfrage zu authentifizieren - siehe MSDN post.

Grundsätzlich, ich denke, Sie auf dem Server haben müssen:

authPersistSingleRequest = False 
authPersistNonNTLM = True 

dann funktioniert es.

+0

'authPersistNonNTLM' Sieht nach einem guten Kandidaten aus. Ich werde das versuchen und melden. –

+0

Das hat es behoben. Vielen Dank. –

Verwandte Themen