2011-12-02 8 views
5

jestem próby utworzenia błąd w TFS2010 przez podszywanie się pod użytkownika, ale zawszeTFS 2010 - Dlaczego podczas personifikacji pojawia się błąd "TF30063 Masz niedozwolony dostęp .."?

"TF30063 You are not authorized to access.."

raz pierwszy uwierzytelniania przy użyciu konta usługi, a następnie próbować podszywać osobne konto użytkownika. Mogę z powodzeniem tworzyć elementy pracy za pomocą konta zarówno programowo, jak i w interfejsie internetowym. Jednak gdy próbuję utworzyć element roboczy za pomocą podanego konta (w obu kierunkach), zawsze otrzymuję ten błąd. Mój kod to:

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; 
       } 
      } 
     } 

    } 

powodzeniem dostaje personifikowanego tożsamość ale przewraca na

ImpersonatedTFS.EnsureAuthenticated(); 

Oba konta mają Make żądań w imieniu innych 'zestaw uprawnień.

+0

Ile przeskoków robisz, aby dostać się do TFF? W przypadku wielu węzłów X-> Y-> Z, usługa na polu Y może być w stanie podszyć identyfikator identyfikatora dzwoniącego w polu X. Jednak nie ma prawa do przekazania tego podszywania się do usługi na innym box Z. – user957902

+0

Tylko jeden skok, o ile mi wiadomo. – Simon

Odpowiedz

0

Skąd użytkownicy mają zestaw uprawnień ? Czy jest to poziom zbierania projektów (dostępny przez Team > Team Project Collection Settings > Security..) lub na poziomie serwera TFS (dostęp przez Team Foundation Administration Console > Application Tier > Security..)?

Myślę, że Twoim problemem jest to, że masz tylko uprawnienia do podszywania się na poziomie "Serwera", ale próbujesz podszyć się pod niego w kolekcji.

To właśnie Taylor ma do powiedzenia w swojej Introducing TFS Impersonation blogu:

To uprawnienie jest zamknięty w każdej kolekcji zespołu projektowego oraz w konfiguracji serwera. Oznacza to, że jeśli Użytkownik A ma to uprawnienie na TPC1, nie będzie mógł podszywać się pod użytkowników podczas rozmowy z TPC2 lub Serwerem konfiguracji. Podobnie, jeśli użytkownik B ma to uprawnienie na serwerze konfiguracji , nie będzie w stanie podszywać się pod użytkowników podczas rozmowy z zespołem Team Project Collections.

1

Najpierw pozwól mi najpierw wyjaśnić jedną rzecz. Wygląda na to, że twoja aplikacja jest aplikacją serwera, w którym to przypadku nie ma żadnej wartości przy korzystaniu z EnsureAuthenticated(). Jest to po prostu sztuczka z dostrajaniem wydajności, aby pomóc użytkownikom UI/desktop.

Powróć do głównego numeru: - Jeśli twoja aplikacja działa zgodnie z oczekiwaniami, gdy uzyskujesz dostęp lokalnie, ale zawiedzie, gdy uzyskujesz dostęp zdalny, należy przeczytać, w przeciwnym razie nie jest to rozwiązanie dla ciebie.

Przyczyną niepowodzenia jest to, że nazwa SPN musi zostać dodana do konta usługi w aktywnym katalogu. Konieczne jest uwierzytelnianie Kerberos.

Jest to coś, co zespół TFS musi wyjaśnić, ponieważ wielu programistów zapomni o tym, koncentrując się na wykonywanej pracy. Mam nadzieję że to pomoże.

Aby dowiedzieć się więcej na temat SPN i podstaw Kerberos, sprawdź następujące zasoby:

Mam nadzieję, że to pomaga.

Dzięki!

Powiązane problemy