TFS всегда использует интегрированные учетные данные для подключения к TFSServer при подключении к домену

У меня ограниченный доступ к серверу TFS, поэтому я намеревался использовать учетную запись администратора в коде для подключения к серверу. Я обнаружил, что при развертывании службы на компьютере, который не присоединяется к домену, он работает просто отлично, но при развертывании службы на компьютере, присоединенном к домену, она использует встроенные учетные данные. Большое спасибо за помощь! Ниже приведен мой код.

        Uri tfsUri = Common.Helper.GetCollectionUri();
        UserCredential userCredential = new UserCredential("administrator", "pass@word1", "zanewill.net");

        TfsTeamProjectCollection col = new TfsTeamProjectCollection(tfsUri, userCredential);

        TeamFoundationIdentity identity;
        col.EnsureAuthenticated();
        col.GetAuthenticatedIdentity(out identity);

Мне нужны учетные данные администратора, но идентификационные данные всегда должны быть учетными данными "zanewill", который является ограниченной учетной записью домена.

Класс UserCredential похож на следующий открытый класс UserCredential: ICredentialsProvider { private NetworkCredential networkCredential;

    public UserCredential(string userName, string password, string domain) {
        networkCredential = new NetworkCredential(userName, password, domain);

    }

    public System.Net.ICredentials GetCredentials(Uri uri, System.Net.ICredentials myCredentials) {
        return networkCredential;
    }

    public void NotifyCredentialsAuthenticated(Uri uri) {

    }
}

Я использую NetworkCredential как следующий код, и он работает, я не знаю почему.

        Uri tfsUri = Common.Helper.GetCollectionUri();
        var networkCredential = new NetworkCredential("administrator", "pass@word1", "zanewill.com");

        TfsTeamProjectCollection col = new TfsTeamProjectCollection(tfsUri,networkCredential);
        TeamFoundationIdentity identity;
        col.EnsureAuthenticated();
        col.GetAuthenticatedIdentity(out identity);

1 ответ

Решение

Вот почему:

В своем первом фрагменте кода вы использовали следующий конструктор TfsTeamProjectCollection:

public TfsTeamProjectCollection(
    Uri uri,
    ICredentialsProvider credentialsProvider
)

И второй параметр определяется как:

Используется для получения учетных данных в случае сбоя учетных данных текущей среды.

Таким образом, если учетные данные текущей среды (известной как ограниченная учетная запись домена) не завершатся с ошибкой, она будет использовать ее вместо учетной записи администратора, с которой вы создали ICredentialsProvider. Вы вошли в систему как zanewill, когда попробовали этот код?

Второй используемый вами конструктор принимает второй параметр в качестве "учетных данных аутентификации", поэтому он и используется.

Другие вопросы по тегам