2016-03-17 35 views
11

Wir versuchen, die TFS 2015-REST-APIs über eine Webseite mit JavaScript aufzurufen, und stellen eine Herausforderung beim Einrichten einer gültigen Authentifizierung mit dem TFS-Server.TFS 2015-REST-API-Authentifizierung

Wir wissen nicht, wie Sie persönliche Tokens oder OAuth-Tokens generieren können. Die folgende Anleitung scheint eher für VSO als für On-Premise-TFS zu gelten. https://www.visualstudio.com/en-us/integrate/get-started/rest/basics

Wie kann ich einen Authentifizierungsschlüssel/Token generieren?

UPDATE: Wie im März 2017 unterstützt die neueste Version von On-Prem TFS das Erstellen von persönlichen Zugriffstoken für alle Benutzer. Mit dem folgenden JavaScript-Code von @Elmar können Sie Anfragen stellen, um TFS-Arbeitselemente aus der REST-API zu aktualisieren, zu bearbeiten.

Antwort

13

Der OAuth-Mechanismus wird zum Zeitpunkt des Schreibens des VSO-API verwendet, wie Sie es scheinbar identifiziert haben. official docs for VSO OAuth tokens here.

Für jedoch auf Prem, ist Folgendes erforderlich:

über ein Javascript-Client (beachten Sie, ich jquery für den Ajax-Request hier bin mit)

Da alternativem creds oder Basis-Auth isn Token nicht verfügbar, um der aktuellen vso-Implementierung zu entsprechen; Sie können den folgenden Ansatz in Betracht ziehen: Wenn Sie über Administratorberechtigungen für die TFS-App-Schicht verfügen, können Sie die Basisauthentifizierung für die TFS-Anwendung in IIS konfigurieren und die Standarddomäne festlegen.

enabling basic auth and setting domain

Und dann rufen Sie wie folgt vor:

var self = this; 
     self.tasksURI = 'https://<SERVER>/tfs/<COLLECTION>/<PROJECT>/_apis/build/builds?api-version=2.0'; 
     self.username = "<USERNAME>"; //basic username so no domain here. 
     self.password = "<PASSWORD>"; 

     self.ajax = function (uri, method, data) { 
      var request = { 
       url: uri, 
       type: method, 
       contentType: "application/json", 
       accepts: "application/json", 
       cache: false, 
       dataType: 'json', 
       data: JSON.stringify(data), 
       beforeSend: function (xhr) { 
        xhr.setRequestHeader("Authorization", "Basic " + btoa(self.username + ":" + self.password)); 
       }, 
       error: function (jqXHR) { 
        console.log("ajax error " + jqXHR.status); 
       } 
      }; 
      return $.ajax(request); 
     } 

     self.ajax(self.tasksURI, 'GET').done(function (data) { 

      alert(data); 

     }); 

WICHTIGER HINWEIS! : Wenn Sie Basic Auth aktivieren, sollten Sie Ihre Site wirklich so konfigurieren, dass sie auch https verwendet, oder Ihre Zugangsdaten werden im Klartext gesendet (wie in der Warnung oben rechts in der Abbildung oben angegeben).


über einen .NET-Client

In on-prem (derzeit rtm'd: 2015 Update 1) die api allgemein gated/eingezäunt mit NTLM aus, eine Pre-Flight-Anfrage und bedeuten gemacht, 401 vom Server zur Herausforderung für die Authentifizierung zurückgegeben, in diesem Fall die Anforderung Credential wie folgt ermöglicht die Anfrage an den Server authentifizieren, sobald die Preflight-Challenge empfangen wird. Um die Herausforderung aufnehmen, dies zu tun:

request.Credentials = new NetworkCredential(this.UserName, this.Password); 
//you may want to specify a domain too 

Wenn Sie grundlegende auth für tfs auf Prem aktiviert haben Sie Authentifizierung versuchen können, wie folgt, dieses Muster den Mechanismus übereinstimmt verwendet, wenn VSO Aufruf nach in der alternativen Anmeldeinformationen ermöglichen ui:

request.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(this.UserName + ":" + this.Password)); 

Hinweis: In einigen Code ich vor ein paar Wochen geändert; Unterstützung für sowohl VSO als auch On-Prem war erforderlich, daher habe ich die beiden obigen Muster verwendet, um das spezifische Szenario zu behandeln.

+0

Dank @Elmar für das Teilen Ihrer Antworten hier. Ich schreibe mehr von Java-Skript, also versuche ich herauszufinden, wie das persönliche Zugriffs-Token anstelle von myPatToken in der Anfrage-Header "Authorization" wie hier erwähnt erstellen? 'headers: { 'Autorisierung': 'Basic' + btoa (" "+": "+" myPatToken) } ' – vikkee

+2

@vikkee siehe bitte die modifizierte Antwort. Ich habe grundlegende Auth-Informationen und ein JavaScript-Snippet bereitgestellt. Was das Token angeht, würde ich es selbst gerne auf der Premierenseite haben. – Elmar

+0

Vielen Dank für Ihre detaillierte JavaScript-Syntax, ich habe keine Erlaubnis oder Einfluss auf den TFS-Administrator bei mir, also muss ich zuerst einen Weg um ihn herum finden. Ist es möglich, herauszufinden, welche Arten von Authentifizierung bereits vom Administrator aktiviert wurden? – vikkee

0

Wenn möglich, würde ich empfehlen, die.NET-Client-Bibliotheken für Visual Studio Team Services (und TFS):

https://www.visualstudio.com/en-us/docs/integrate/get-started/client-libraries/dotnet

können Sie Windows-Authentifizierung verwenden (das ist, was ich brauchte). Nach einschließlich der folgenden nuget Pakete in meinem Code:

Microsoft.TeamFoundationServer.Client 
Microsoft.VisualStudio.Services.Client 
Microsoft.VisualStudio.Services.InteractiveClient 

konnte ich diesen Code schreiben:

// Create instance of VssConnection using Windows credentials (NTLM) 
var connection = new VssConnection(new Uri("http://mytfsserver:8080/tfs/CollectionName"), new VssClientCredentials()); 

// Create instance of WorkItemTrackingHttpClient using VssConnection 
var gitClient = connection.GetClient<GitHttpClient>(); 
var items = gitClient.GetRepositoriesAsync().Result; 

foreach (var item in items) 
{ 
    Console.WriteLine(item.Name); 
} 

Siehe auch: https://www.visualstudio.com/en-us/docs/integrate/get-started/client-libraries/samples

1

Meine Frage ist alt, aber wie auf März 2017, Die neueste Version von On-Prem TFS unterstützt die Erstellung persönlicher Zugriffstoken für alle Benutzer. Mit dem JavaScript-Code von @Elmar können Sie Anfragen stellen, um TFS-Arbeitselemente von der REST-API zu aktualisieren, zu bearbeiten.

+0

Ausgezeichnet! Danke für das Feedback @vikkee – Elmar