2016-07-08 19 views
0

Wir haben ein WebAPI-Projekt, das einige Controller, die Aufgaben mit TFS ausführen, verfügbar macht. Wir verbinden in der Regel wie folgt aus:Verbinden mit TFS in Webserver mit Windows-Authentifizierung

var server = 
    new Microsoft.TeamFoundation.Client.TfsConfigurationServer(new Uri("http://XXX")); 
server.EnsureAuthenticated(); 

Mein Verständnis dafür ist: Es funktioniert, weil irgendwie, meine IIS Express die Anwendung unter meinem Konto ausgeführt wird. Irgendwie kann der TfsConfigurationServer meine Anmeldeinformationen lesen und sie beim Abfragen/Schreiben über TFS verwenden.

Jetzt kommt das Problem, wenn ich versuche, dies in einem echten Webserver zu hosten. Kommt zurück mit:

"TF30063: You are not authorized to access http://XXX" 

I Windows-Authentifizierung aktiviert haben, so dass, wenn ich drucken:

User.Identity.Name -> (domain\\my_user). 

Auch ist es mein Benutzername, es scheint nicht genug zu sein. Ich nahm die TfsConfigurationServer Klasse nicht die Anmeldeinformationen erhalten können, also habe ich versucht, mehr explizit zu sein:

new TfsConfigurationServer(new Uri("XXX"), CredentialCache.DefaultNetworkCredentials); 

hat nicht funktioniert. Ich nahm an, dass DefaultNetworkCredentials funktionieren würde, da ich die Windows-Authentifizierung aktiviert und Anonymous deaktiviert habe. Lesen mehr Ich habe auch gefunden:

var id = (WindowsIdentity)User.Identity; 
using (id.Impersonate()) 
{ 
    return myOperation.CallMethod(); 
} 

Aber das gleiche Ergebnis. In CallMethod() habe ich TfsConfigurationServer mit den DefaultNetworkCredentials erneut aufgerufen. Der Identitätswechsel scheint gut zu funktionieren, aber die Authentifizierung für TFS schlägt trotzdem fehl.

Wie kann ich die Anmeldeinformationen für TFS vom derzeit angemeldeten Benutzer im Server über Windows Auth? Bereitstellen. Wie funktioniert es in lokalen ?.

Hinweis: Ich habe auch über TFS Identitätswechsel gelesen (https://blogs.msdn.microsoft.com/taylaf/2009/12/04/introducing-tfs-impersonation/). Mein Problem ist, dass es einige Berechtigungen auf dem Server erfordert, ich würde gerne dieses Verhalten nachahmen, ohne diese Technik zu verwenden, nicht sicher, ob das möglich ist.

Antwort

1

einen Versuch mit folgenden Code geben:

var tfsCredentials = new TfsClientCredentials(System.Net.CredentialCache.DefaultCredentials, true); 
    TfsTeamProjectCollection teamCollection = new TfsTeamProjectCollection(new Uri("http://tfssite.com/tfs/" + Collection), tfsCredentials); 
+0

Ich schätze @ Patrick-MSFT wirklich, wirklich, leider hat es nicht funktioniert. Die seltsamste Sache ist, dass ich den ASP.NET-Identitätswechsel auf dem Server aktiviert habe (IIS 8, aber das Hinzufügen von validateIntegratedModeConfiguration = false). Danach wird es funktionieren, wenn ich vorher den Server mit dem Remote-Desktop anmelde und dort die URL anrufe: O. Es funktioniert für ein paar Minuten. – IoChaos