2017-10-18 2 views
0

Ich kann mit Teamcity von C# mit NTLM nicht authentifizieren. Es funktioniert im Browser und mit Postman.C# zu Teamcity NTLM Authentifizierung fehlgeschlagen

Mit Protokollierung aktiviert es scheint, die NTLM-Handshake zu tun, sondern setzt sich dann auf einem 401-Fehler mit:

The token supplied to the function is invalid 
To login manually go to "/login.html" page  

Beispielcode ist unten. Ich bin mir nicht sicher, was hier falsch ist. Es funktioniert mit der Standardauthentifizierung und einer modifizierten URI einschließlich httpAuth.

 string uri = "http://teamcityserver/ntlmAuth/action.html?add2Queue=SomeBuild"; 

     CredentialCache cc = new CredentialCache(); 
     cc.Add(new Uri(uri), "NTLM", new NetworkCredential("user", "password")); // Have also tried default credentials 

     var req = HttpWebRequest.Create(uri); 
     req.Method = "POST"; 
     req.Credentials = cc; 
     req.Headers.Add("Origin: http://teamcity"); 
+0

AFAIK, wenn sie mit Windows-Konten zu tun, müssen Sie den Domänennamen (oder eine Domäne fehlt, der lokale Rechnername) als Teil des Benutzernamens, z.B. 'Domäne \ Benutzer'. – NightOwl888

+0

@ NightOwl888 Es gibt eine 3-Argument-Version von NetworkCredential mit der Domäne als das 3. Argument, das ich auch ohne Erfolg versucht habe. Ich habe es nur für den Fall in das Benutzerfeld hinzugefügt, aber das gleiche Ergebnis erhalten. –

Antwort

0

Verstanden! Der fehlende Faktor war, dass die Cookies während des NTLM-Hin und her nicht vom Client gesendet wurden.

Addiert man diese es fest:

req.CookieContainer = new CookieContainer();