Team Foundation客户端未使用提供的凭据

时间:2014-07-25 19:10:20

标签: c# tfs azure-devops

我正在尝试与TFS Online(又名Visual Studio Online)进行一些自动交互。在我的开发机器上编写和测试代码时,这已成功连接:

creds = new Credentials(userName, password);

tfsConfig = TfsConfigurationServerFactory.GetConfigurationServer(new Uri(vsoUrl), creds);
tfsConfig.EnsureAuthenticated();

凭据类:

public class Credentials : ICredentialsProvider
{
    string _userName;
    string _password;

    public Credentials(string userName, string password)
    {
        _userName = userName;
        _password = password;
    }

    public ICredentials GetCredentials(Uri uri, ICredentials failedCredentials)
    {
        return new NetworkCredential(_userName, _password);
    }

    public void NotifyCredentialsAuthenticated(Uri uri)
    {
        throw new NotImplementedException();
    }
}

然后我去部署代码并在服务帐户下运行它,我收到了这个错误:

  

Microsoft.TeamFoundation.TeamFoundationAuthenticationRedirectionException:TF30064:您无权访问服务器。

     

     

Microsoft.TeamFoundation.Client.TfsConnection.ThrowAuthorizationException(Exception e)

     

     

Microsoft.TeamFoundation.Client.TfsConnection.UseCredentialsProviderOnFailure(Action action,Int32 retries,Boolean throwOnFailure)...

因此,经过大量尝试的解决方案后,我尝试在本地开发机器测试中输入不正确的密码' 它仍然连接正常!所以我只能假设我没有在代码中正确设置凭据,成功的本地测试是因为我已经在Visual Studio中连接。

任何人都可以理解这一点或发现我做错了吗?

1 个答案:

答案 0 :(得分:0)

我认为它在您的开发计算机上运行的原因是因为您的有效creadentials已经缓存,因此根本不会调用您的CredentialsProvider。

采用ICredentialsProvider的TfsConfigurationServer构造函数在MSDN documentation中标记为已废弃。我建议使用ICredentials作为输入的那个(here)。代码如下所示:

var userCreds = new NetworkCredential(userName, password);
var tfsServer = new TfsConfigurationServer(new Uri(vsoUrl), userCreds);
tfsServer.EnsureAuthenticated();

另一种选择是使用TfsTeamProjectCollection class而不是TfsConfigurationServer。