如何使用PAT或OAUT连接TFS Online?

时间:2018-04-17 00:23:33

标签: login tfs azure-devops azure-devops-rest-api

不敢相信我遇到了登录:(当发生这种情况时很讨厌。

有人可以通过使用PAT密码或在最好的情况下使用OAuth令牌来了解如何连接TF.EXE吗?

我可能会补充一点,我已经有了一个Pat令牌和一个OAuth令牌,在尝试获取这些令牌时没有问题,但每次尝试这个例子时都会这样:

TF.exe workspaces /collection:xxxx.visualstudio.com/xxxx /loginType:OAuth /login:.,MyPatTokenOrMyOauthToken /noprompt

我收到以下回复:

  

TF30063:您无权访问xxxx.visualstudio.com \ xxxx。

所以,我知道命令它没关系,因为如果我没有指定登录,模态窗口会提示输入凭据,我已经使用该方法进行了测试并且工作正常。

最后,我可能会更改所有内容以更改TFS api的tf.exe,但我无法在api中找到相同的方法(参见参考:https://docs.microsoft.com/es-es/rest/api/vsts/?view=vsts

如果API具有与TF.exe相同的方法,那将是有用的,但到目前为止,我在API中看不到相同的方法。

希望有人能解决我的问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

从我的测试中,PAT令牌不能在以下命令中工作,您必须获得OAuth令牌:

tf workspaces /collection:https://xxxx.visualstudio.com /loginType:OAuth /login:.,[OAuth token]

对于使用Visual Studio Team Services(VSTS)进行身份验证的api,您可以参考this link中的示例:

以下是获取帐户项目列表的示例

REST API

using System.Net.Http;
using System.Net.Http.Headers;

...

//encode your personal access token                   
string credentials = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", personalAccessToken)));

ListofProjectsResponse.Projects viewModel = null;

//use the httpclient
using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("https://{accountname}.visualstudio.com");  //url of our account
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials); 

    //connect to the REST endpoint            
    HttpResponseMessage response = client.GetAsync("_apis/projects?stateFilter=All&api-version=1.0").Result;

    //check to see if we have a succesfull respond
    if (response.IsSuccessStatusCode)
    {
        //set the viewmodel from the content in the response
        viewModel = response.Content.ReadAsAsync<ListofProjectsResponse.Projects>().Result;

        //var value = response.Content.ReadAsStringAsync().Result;
    }   
}

.Net客户端库

using Microsoft.TeamFoundation.Core.WebApi;
using Microsoft.VisualStudio.Services.Common;

...

//create uri and VssBasicCredential variables
Uri uri = new Uri(url);
VssBasicCredential credentials = new VssBasicCredential("", personalAccessToken);

using (ProjectHttpClient projectHttpClient = new ProjectHttpClient(uri, credentials))
{
    IEnumerable<TeamProjectReference> projects = projectHttpClient.GetProjects().Result;                    
}

添加屏幕截图:

enter image description here

<强>更新

我已使用新帐户进行测试,结果如下。如果我删除了/loginType/login参数,系统会弹出一个窗口让我登录。

没有/loginType/login参数的屏幕截图:

enter image description here

包含/loginType/login参数的屏幕截图:

enter image description here