Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to connect TFS Online using PAT or OAUT?

Can't believe I'm stuck with a LOGIN :( hate when this happens.

Can somebody enlight me how to connect TF.EXE by using PAT password or in the best case an OAuth token?

I might add that I already have a Pat token and an OAuth token, not a problem while trying to get those, but every time I try this example:

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

I get the following response:

TF30063: You are not authorized to access xxxx.visualstudio.com\xxxx.

So, I Know command it's ok, because if I don't specify a login, a modal window prompts for credentials, and I tested already with that approach and works fine.

For the end, I might change everything to change tf.exe for the TFS api, but I'm unable to find same methods in the api (see reference: https://docs.microsoft.com/es-es/rest/api/vsts/?view=vsts )

If API has same methods than TF.exe, that will be useful, but so far I don't see same methods in the API.

Hope somebody has the solution for my problem.

Thanks in advance.

like image 882
Yogurtu Avatar asked Apr 17 '18 00:04

Yogurtu


1 Answers

From my test, PAT token doesn't work in the following command, you have to get a OAuth token:

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

For the api that authenticate with Visual Studio Team Services (VSTS), you could refer to the examples in this link:

Here is an example getting a list of projects for your account:

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 Client Libraries

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

Add a screenshot:

enter image description here


Update:

I've tested with a new account, and the result is as below. If I remove /loginType and /login parameters, a window will pop up to ask me logon.

The screenshot without /loginType and /login parameters:

enter image description here

The screenshot with /loginType and /login parameters:

enter image description here

like image 100
Cece Dong - MSFT Avatar answered Oct 11 '22 01:10

Cece Dong - MSFT