Javascriptを使用してWebページからTFS 2015 REST APIを呼び出すことを試みており、TFSサーバーとの有効な認証の確立に課題があります。
個人用のアクセストークンまたはOAuthアクセストークンを生成する方法がわかりません。以下の手順は、オンプレミスTFSよりもVSOに多く適用されるようです。 https:// www .visualstudio.com/en-us/integrate/get-started/rest/basics
認証キー/トークンを生成するにはどうすればよいですか?
更新:2017年3月と同様、On-Prem TFSの最新リリースでは、すべてのユーザーの個人用アクセストークンの作成がサポートされています。 @Elmarによる以下のJavaScriptコードを使用すると、REST APIからTFS作業項目を編集、編集する要求を行うことができます。
OAuthメカニズムは、これを書いている時点ではVSO APIに対して使用されているようです。 VSOの公式ドキュメントOAuth tokensここ 。
ただし、オンプレミスの場合は、次のものが必要です。
javascriptクライアント経由(ここでは、ajaxリクエストにjqueryを使用していることに注意してください)
現在のvso実装と一致する代替クレデンシャルまたはトークンベースの認証はオンプレミスでは利用できないため。次のアプローチを検討できます。TFSアプリ層の管理者権限がある場合、IISでtfsアプリケーションの基本認証を構成し、デフォルトドメインを設定できます。
次に、次のように呼び出します。
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 update 1)では、APIは通常NTLMでゲート/フェンスされます。つまり、プリフライト要求が行われ、サーバーから401が認証のためのチャレンジに返されます。この場合、リクエストが設定されます。 Credential次のように、プリフライトチャレンジが受信されると、リクエストはサーバーに対して認証されます。課題に対応するには、次のようにします。
request.Credentials = new NetworkCredential(this.UserName, this.Password);
//you may want to specify a domain too
Premでtfsの基本認証を有効にした場合、次のように認証を試みることができます。このパターンは、UIで別の認証情報を有効にした後でvsoを呼び出すときに使用されるメカニズムと一致します。
request.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(this.UserName + ":" + this.Password));
注:一部のコードでは、数週間前に変更しました。 VSOとオンプレミスの両方のサポートが必要だったので、上記の2つのパターンを使用して特定のシナリオに対処しました。
私の質問は古いですが、2017年3月と同様に、On-Prem TFSの最新リリースは、すべてのユーザーの個人アクセストークンの作成をサポートしています。 @ElmarによるJavaScriptコードを使用すると、REST APIからTFS作業項目を更新、編集するように要求できます。
可能であれば、Visual Studio Team Services(および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