我正在尝试使用C#连接到以前称为VSTS的Azure DevOps。我想在没有天蓝色DevOps的登录屏幕的情况下连接到它。我目前正在尝试以下代码,但有些代码无法正常工作

        NetworkCredential netCred = new NetworkCredential("[email protected]", "test");
        Uri tfsuri = new Uri("https://dev.azure.com/test10");
        VssBasicCredential bsCred = new VssBasicCredential(netCred);
        VssCredentials vssCred = new VssClientCredentials(bsCred);

        TfsTeamProjectCollection collection = new TfsTeamProjectCollection(tfsuri, vssCred);

        collection.Authenticate();

        var witClient = collection.GetClient<ProjectHttpClient>();
        var listOfProjects = witClient.GetProjects().Result;

我正在使用的库
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Core.WebApi;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.Operations;
using Microsoft.VisualStudio.Services.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;

该代码将提示登录屏幕,如果我输入密码,身份验证仍然无法进行。我不希望出现登录屏幕,而只希望使用用户名和密码进行连接。

使用备用凭据时,此方法有效,但这不是我的要求,并且我无法使用备用凭据。

我尝试按照official site中的示例进行操作,但是没有解决方案适用于新的DevOps。

任何解决方案如何在没有登录屏幕的情况下如何在新DevOps中使用usernanme/password进行身份验证

最佳答案

TfsTeamProjectCollection来自旧的.Net库,尝试使用新的Azure DevOps .Net libraries,您可以通过以下几种方式进行身份验证:

NTLM

最基本的方法是构造一个完全不带参数的VssCredentials实例,而您将要使用的只是集成身份验证/NTLM:

var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssCredentials());

基本身份验证

VSTS和TFS还提供了利用基本身份验证(HTTP AUTH)的方法,您需要首先创建并启用该功能(see VSTS guidelines),一旦完成,就可以通过以下API来使用它们:
var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssBasicCredential(username, password));

个人访问 token

接下来是个人访问 token (PAT),您可以按照VSTS指南easily create进行访问,这些PAT是一种使用细粒度和按访问 token 的安全范围与实际凭据分开进行身份验证的方法。简而言之,它允许您为每个用例甚至应用程序创建PAT,从而以一种安全且清晰分开的方式为应用程序或第三方代表您提供访问VSTS或TFS系统的权限。

要通过API使用这些密码,您使用与通过基本身份验证完全相同的机制,但是您根本不提供任何用户名(嗯-准确地说,是一个空的用户名),而PAT本身用作密码:
var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssBasicCredential(string.Empty, pat));

Visual Studio登录提示

此外,身份验证的另一种方法是使用标准的VS登录提示,该提示同样很容易通过VssClientCredentials类公开:
var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssClientCredentials());

OAuth身份验证

OAuth是一种广泛使用的授权协议(protocol),但实现起来却比较繁琐,但幸运的是,CodePlex上有专门针对VSTS/VSO的完整示例应用程序(也适用于内部部署)。

一旦有了相应的访问 token ,就可以使用VssOAuthCredential类将其用于VSTS/TFS:
var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssOAuthCredential(accessToken));

Azure Active Directory身份验证

最后但并非最不重要的一点是,您可以通过VssAadCredential类利用Azure Active Directory身份针对VSTS或TFS系统进行身份验证:
var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssAadCredential(username, password));

关于azure-devops - DevOps : Non-Interactive login in new DevOps(VSTS) not working getting error 'TF30063: You are not authorized to access,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53289522/

10-12 18:52