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, когда попробовали этот код?
Второй используемый вами конструктор принимает второй параметр в качестве "учетных данных аутентификации", поэтому он и используется.