2016-03-17 28 views
11

Javascriptを使用してWebページからTFS 2015 REST APIを呼び出そうとしており、TFSサーバーとの有効な認証を確立することに挑戦しています。TFS 2015 REST API認証

個人用アクセストークンまたはOAuthアクセストークンの生成方法はわかりません。以下の説明は、社内TFSよりもVSOに多く適用されているようです。 https://www.visualstudio.com/en-us/integrate/get-started/rest/basics

認証キー/トークンはどのように生成できますか?

更新:2017年3月のOn-Prem TFSの最新リリースでは、すべてのユーザーの個人用アクセストークンの作成がサポートされています。以下の@Elmarのjavascriptコードを使用すると、REST APIからTFSワークアイテムを編集、更新するリクエストを行うことができます。

答えて

13

OAuthメカニズムは、一見したように、これを書いている時点でVSO APIに対して使用されています。 official docs for VSO OAuth tokens here。代替credsをので、JavaScriptクライアント経由

(私はここでのAjaxリクエストのためのjQueryを使用しています注意してください)

やベースの認証ISNをトークン:

ただし、以下が必要とされる上、プレムについて現在のvsoの実装に合わせてオンサイトで利用できます。 TFSアプリケーション層に管理者権限がある場合、IISのtfsアプリケーションの基本認証を構成し、をデフォルトドメインに設定することができます。

enabling basic auth and setting domain

そして、次のように呼び出す:

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); 

     }); 

重要な注意を! :基本認証を有効にすると、実際にhttpsを使用するようにサイトを設定する必要があります。または、認証情報が平文で送信されます(上記の画像の右上に表示される警告に示されています)。オンプレムで.NETクライアント

経由


(現在rtm'd:2015更新1)APIは、一般的に/ゲートされ、プリフライトリクエストがある意味、NTLMで仕切らこの場合、要求資格情報を次のように設定すると、プリフライトチャレンジが受信された時点で、サーバーに対して認証を要求することができます。あなたは次のように認証を試みることができるプレムのTFSのための基本的な認証を有効にしている場合、このパターンは、代替の資格情報を有効にした後VSOを呼び出すときに使用するメカニズムと一致する

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

:あなたがこれを行うことができます挑戦に対応するために ui:

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

注:いくつかのコードでは、数週間前に変更しました。 VSOとオン・プレミア両方のサポートが必要でしたので、上記の2つのパターンを使用して特定のシナリオを処理しました。

+0

ここであなたの答えを共有してくれてありがとう@Elmar。私はjavaスクリプトの詳細を書いているので、ここで述べたように、リクエストヘッダー "Authorization"にmyPatTokenの代わりに個人用アクセストークンを作成する方法を見つけようとしていますか? 'ヘッダ:{ '承認': '基本' + btoa(" + ":" + myPatToken) } – vikkee

+2

@vikkee修正された答えをご覧ください。基本的な認証情報とjavascriptスニペットを提供しました。トークンに関する限り、私は自分がそれを前提にしたいと思う。 – Elmar

+0

javascriptの詳細な構文をお寄せいただきありがとうございます。私の所ではTFS管理者の権限や影響力がありませんので、まずその回避方法を見つけ出す必要があります。どのタイプの認証が管理者によって既に有効になっているかを知ることは可能でしょうか? – vikkee

0

可能であれば、を使用することをお勧めします。Visual Studioのチームサービス(およびTFS)のためのNETクライアントライブラリ:

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

あなたは(私は必要なものである)Windows認証を使用することができます。私のコードで、次のnugetパッケージを含む後:

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

私はこのコードを書くことができました。また、

// 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); 
} 

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

1

私の質問は古いですが、2017年3月にとして、 On-Prem-TFSの最新リリースでは、すべてのユーザーの個人用アクセストークンの作成がサポートされています。 @Elmarのjavascriptコードを使用すると、REST APIからTFSワークアイテムを編集、更新するリクエストを行うことができます。

+0

優秀!フィードバックありがとう@vikkee – Elmar