TFS 2010 - Почему при олицетворении возникает ошибка "TF30063. У вас нет прав доступа".

Я пытаюсь создать ошибку в TFS2010, выдавая себя за пользователя, но всегда получаю

"TF30063 You are not authorized to access.."

Сначала я проверяю подлинность, используя служебную учетную запись, а затем пытаюсь выдать себя за отдельную учетную запись пользователя. Я могу успешно создавать рабочие элементы, используя любую учетную запись как программно, так и в веб-интерфейсе. Однако, когда я пытаюсь создать рабочий элемент, используя олицетворенную учетную запись (в любом случае), я всегда получаю эту ошибку. Мой код:

public int Save(List<KeyValuePair<string, string>> values, ticketType type,string user)
    {
        // get the Uri to the project collection to use
        Uri  tfsuri = new Uri("http://94.23.12.119:8085/tfs");            

        // get a reference to the team project collection (authenticate as generic service account)
        using (var tfs = new TfsTeamProjectCollection(tfsuri, new System.Net.NetworkCredential("username", "password", "servername")))
        {
            tfs.EnsureAuthenticated();

            //Now get the details of the user we want to impersonate
            TeamFoundationIdentity identity = GetImpersonatedIdentity(tfsuri,tfs,user);

            //Now connect as the impersonated user
            using (TfsTeamProjectCollection ImpersonatedTFS = new TfsTeamProjectCollection(tfsuri, identity.Descriptor))
            {
                ImpersonatedTFS.EnsureAuthenticated();
                var workItemStore = GetWorkItemStore(ImpersonatedTFS);

                // create a new work item
                WorkItem wi = new WorkItem(GetWorkItemType(type, workItemStore));
                {
                    //Values are supplied as a KVP - Field Name/Value
                    foreach (KeyValuePair<string,string> kvp in values)
                    {
                        if (wi.Fields.Contains(kvp.Key))
                        {
                            wi.Fields[kvp.Key].Value = kvp.Value;
                        }
                    }

                    ValidationResult = wi.Validate();                       
                }

                if (ValidationResult.Count == 0)
                {

                    wi.Save();
                    return wi.Id;
                }
                else
                { 
                    return 0;
                }
            }
        }

    }

Он успешно получает олицетворенную личность, но падает на

ImpersonatedTFS.EnsureAuthenticated();

Обе учетные записи имеют набор разрешений "Делать запросы от имени других".

2 ответа

Сначала позвольте мне сначала уточнить одну вещь. Кажется, ваше приложение является серверным приложением, и в этом случае нет смысла использовать EnsureAuthenticated(). Это просто трюк с настройкой производительности, чтобы помочь UI/ настольным клиентам.

Теперь вернемся к вашей основной проблеме: - Если ваше приложение работает должным образом при локальном доступе, но не работает при удаленном доступе, тогда, пожалуйста, продолжайте читать, иначе это не решение для вас.

Причиной сбоя является то, что имя SPN необходимо добавить к учетной записи службы в активном каталоге. Для проверки подлинности Kerberos необходимо.

Это то, что команда TFS должна объяснить, потому что многие разработчики забудут об этом, сосредоточившись на своей работе. Надеюсь это поможет.

Чтобы узнать больше об основах SPN и Kerberos, ознакомьтесь со следующими ресурсами:

Надеюсь, это поможет.

Спасибо!

Где ваши пользователи имеют Make requests on behalf of others разрешение установлено? На уровне коллекции проектов (доступ через Team > Team Project Collection Settings > Security..) или на уровне сервера TFS (доступ через Team Foundation Administration Console > Application Tier > Security..)

Я думаю, что ваша проблема в том, что у вас есть разрешение только для имитации себя на уровне "Сервер", но вы пытаетесь имитировать себя в коллекции.

Вот что Тейлор говорит в своем блоге " Представление подражания TFS":

Это разрешение инкапсулировано в каждой Коллекции командных проектов и в Сервере конфигурации. Это означает, что если у пользователя А есть это разрешение на TPC1, ему не будет разрешено выдавать себя за пользователей при обращении к TPC2 или серверу конфигурации. Точно так же, если у пользователя B есть это разрешение на сервере конфигурации, он не сможет выдать себя за пользователя, когда общается с какой-либо из коллекций командных проектов.

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