Аутентификация на TFS 2010 - PullRequest
9 голосов
/ 13 мая 2010

У меня проблемы с аутентификацией в качестве конкретного пользователя на MS Team Foundation Server. В старых версиях это выглядело бы так:

teamFoundationCredential = new System.Net.NetworkCredential("<USERNAME>", "<PASSWORD>", "<DOMAIN>");

TeamFoundationServer tfs = new TeamFoundationServer("http://mars:8080/", teamFoundationCredential);

Может кто-нибудь сказать мне эквивалент для версии 2010 года. Пока что у меня есть:

ICredentialsProvider cred = null;

tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://asebeast.cpsc.ucalgar.ca:8080/tfs/DefualtCollection"));

tfs.EnsureAuthenticated();

Спасибо

Ответы [ 4 ]

13 голосов
/ 23 июня 2010

Для TFS 2010 используйте следующее:

TfsTeamProjectCollection collection = new TfsTeamProjectCollection(
        new Uri("http://asebeast.cpsc.ucalgar.ca:8080/tfs/DefaultCollection",
        new System.Net.NetworkCredential("domain_name\\user_name", "pwd"));
collection.EnsureAuthenticated();
4 голосов
/ 01 февраля 2011

У меня была такая же проблема. Вышеупомянутое решение не работает для меня и действительно не может понять, почему. Я продолжаю получать исключение броска. Потратил день, пытаясь это выяснить - поэтому подумал, что поделюсь своим текущим решением этой проблемы. Я создал свой собственный внутренний класс, который реализует ICredentialsProvider - как показано ниже:

private class MyCredentials : ICredentialsProvider
{
    private NetworkCredential credentials;
    #region ICredentialsProvider Members
    public MyCredentials(string user, string domain, string password)
    {
        credentials = new NetworkCredential(user, password, domain);
    }

    public ICredentials GetCredentials(Uri uri, ICredentials failedCredentials)
    {
       return credentials;
    }

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

    #endregion
}

Затем я создаю его экземпляр и передаю, как показано ниже:

MyCredentials credentials = new MyCredentials(UserName, Password, Domain);
TfsTeamProjectCollection configurationServer =
    TfsTeamProjectCollectionFactory.GetTeamProjectCollection(
        new Uri(tfsUri), credentials);

Обратите внимание, что я не реализовал NotifyCredentialsAuthenticated - не уверен, что это на самом деле делает, поэтому оставил там исключение NotImplementedException, чтобы я мог перехватить его при вызове, чего до сих пор не произошло. Теперь успешно подключен к TFS.

0 голосов
/ 11 сентября 2016

Это сработало очень хорошо для меня:

_tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri);
_tfs.ClientCredentials = new TfsClientCredentials(new WindowsCredential(new NetworkCredential("myUserName", "qwerty_pwd", "myDomainName")));
_tfs.EnsureAuthenticated();
0 голосов
/ 07 февраля 2013

У меня были некоторые проблемы с подключением к нашему старому серверу TFS 2008 с использованием этого метода, но вещь, которая разрешила мой случай, была действительно простой:

Сначала я определил URL TFS следующим образом:

private const string Tfs2008Url = @"http://servername:8080/tfs/";
static readonly Uri Tfs2008Uri = new Uri(Tfs2008Url);

Путь, используемый в URL-адресе, - это тот, который мы используем при подключении через VisualStudio, поэтому я подумал, что это должно быть одинаково в вызовах API, но когда я попытался использовать его со следующей аутентификацией, я получил TF31002 / 404 ошибка:

var collection = new TfsTeamProjectCollection(Tfs2008Uri,new NetworkCredential("AdminUser","password","domain_name"));
collection.EnsureAuthenticated();

Но когда я изменил URL-адрес на корень TFS, он подтвердил подлинность OK!

private const string Tfs2008Url = @"http://servername:8080/";
static readonly Uri Tfs2008Uri = new Uri(Tfs2008Url);

Не знаю, помогло ли это кому-нибудь, но это точно помогло мне!

...