TFS REST API 授权

TFS REST API Authorization

通过 C# 控制台应用程序和 TFS 2015 更新 3 请求 TFS REST API 时获取 "Unauthorized" 状态代码。

大家好,

我正在尝试使用 C# 控制台应用程序控制 TFS(2015 更新 3)REST API。

在我的旧应用程序中,我引用了 Microsoft.VisualStudio.Build.Client(等)库,并且可以通过 TfsTeamProjectCollection 访问我需要的信息。老实说,我不知道身份验证的来源。也许通过 Windows 凭据或与 Visual Studio 关联的帐户。无论如何,我不必在我的应用程序中指定凭据。

但我没有找到 REST API 的示例,我无需特别授权。

我找到了一个使用 .NET 客户端库的示例,该客户端库通过 VssCredentials(使用 NTLM)对自身进行授权。我也不必在此处指定用户名或密码:

VssConnection connection = new VssConnection(new Uri(URL), new VssCredentials());

这也行,但我无法获得所需的所有信息,所以我想自己控制 REST API。

有人可以给我一个示例,说明如何在没有单独的 username/password 的情况下访问 REST API 吗?或者这不再可能了?

谢谢 约翰内斯

using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    using (HttpResponseMessage response = await client.GetAsync("http://ServerName:8080/tfs/CollectionName/ProjectName/_apis/build/builds/BuildID"))
    {
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseBody);
    }
}

我希望得到 json 响应,但我只得到未经授权的异常。

我也将 HttpClient 与 pat 或 username/password 一起使用。我已经使用默认凭据进行了测试,并且得到了 401。然后我发现了这个 post:

我已经使用 WebClient 创建了示例并且它有效:

WebClient wc = new WebClient();
wc.UseDefaultCredentials = true;
wc.Headers.Add("Content-Type", "application/json");

var data = wc.OpenRead("http://my-srv:8080/tfs/DefaultCollection/MyProject/_apis/build/builds/MyId?api-version=3.0");

var response = new StreamReader(data).ReadToEnd();

您需要将 HttpClientHandler() 添加到您的 HttpClient:

using (HttpClient client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
{
     // ... 
}

正如 Shamrai Aleksander 所说,您可以使用 WebClient 默认凭据,或者,您可以使用 TFS 安全创建自定义 PAT 并限制用户访问。 请在此处找到有关 TFS PAT 的更多信息:https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops