【问题标题】:How to connect TFS Online using PAT or OAUT?如何使用 PAT 或 OAUT 连接 TFS Online?
【发布时间】:2018-09-26 19:50:42
【问题描述】:

不敢相信我被 LOGIN 卡住了 :( 讨厌这种情况。

有人可以告诉我如何使用 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 中没有看到相同的方法。

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

提前致谢。

【问题讨论】:

  • 如何生成 OAuth 令牌?令牌是否具有所需的范围?
  • 我使用了这个例子:docs.microsoft.com/en-us/vsts/integrate/get-started/…(一开始,它有一个下载 ac# 例子的链接,效果很好)我也可以从 tfs api 获取我的项目,范围 =全部。
  • 在VSTS中注册OAuth客户端应用并在web.config中更新范围时,如何配置?检查列出的所有范围,并在web.config文件中一一输入所有范围?
  • 您可能正在使用一个使用配置来存储范围的应用程序,这与 Oauth 无关,此外,我重复一遍;令牌很好,我可以毫无问题地执行 API,唯一的问题是在执行 TF.exe 并使用 /loginType:OAuth

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


【解决方案1】:

根据我的测试,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;                    
}

添加截图:


更新:

我用一个新账号测试过,结果如下。如果我删除/loginType/login 参数,会弹出一个窗口要求我登录。

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

带有/loginType/login参数的截图:

【讨论】:

  • 请阅读我所说的“我可能会补充说我已经有一个 Pat 令牌和一个 OAuth 令牌”......您的答案是关于我已经做过并解释过的事情,但它失败了。谢谢。
  • 您是如何生成 OAuth 令牌的?
  • 您能否重新生成 OAuth 令牌?由于访问令牌过期相对较快。
  • 我能够在 TFS API 中执行东西,检索项目和东西......所以令牌是有效的。
猜你喜欢
  • 1970-01-01
  • 2013-05-25
  • 2012-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2022-01-15
相关资源
最近更新 更多