2011-12-02 23 views
5

Tôi đang cố gắng để tạo ra một lỗi trong TFS2010 bởi mạo danh một người sử dụng nhưng luôn luôn có đượcTFS 2010 - Tại sao tôi nhận được thông báo "TF30063 Bạn không được phép truy cập .." khi mạo danh?

"TF30063 You are not authorized to access.."

đầu tiên tôi xác thực sử dụng một tài khoản dịch vụ và sau đó cố gắng để mạo danh một tài khoản người dùng riêng biệt. Tôi có thể tạo thành công các mục công việc bằng cách sử dụng cả hai tài khoản theo lập trình và trong giao diện người dùng web. Tuy nhiên, khi tôi cố gắng tạo Mục công việc đã sử dụng tài khoản bị mạo danh (cả hai cách xung quanh), tôi luôn nhận được lỗi này. Mã của tôi là:

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

    } 

Nó được thành công bản sắc mạo nhận nhưng giảm hơn trên

ImpersonatedTFS.EnsureAuthenticated(); 

Cả hai tài khoản có 'Hãy yêu cầu nhân danh người khác' tập quyền.

+0

Bạn đang thực hiện bao nhiêu bước nhảy để truy cập tfs? Trong trường hợp của nhiều nút X-> Y-> Z, dịch vụ trên hộp Y có thể mạo danh id của người gọi trên hộp X. Tuy nhiên, nó mau không có quyền chuyển giao mạo danh đó vào một dịch vụ trên một dịch vụ khác hộp Z. – user957902

+0

Chỉ cần một bước nhảy xa như tôi biết. – Simon

Trả lời

0

Người dùng của bạn có tập giấy phép Make requests on behalf of others ở đâu? Có phải ở cấp Bộ sưu tập dự án (truy cập qua Team > Team Project Collection Settings > Security..) hoặc ở cấp máy chủ TFS (truy cập qua Team Foundation Administration Console > Application Tier > Security..) không?

Tôi nghĩ rằng vấn đề của bạn là bạn chỉ có quyền mạo danh ở cấp 'Máy chủ', nhưng bạn đang cố gắng mạo danh trong bộ sưu tập.

Đây là những gì Taylor đã nói trong bài Introducing TFS Impersonation blog của mình:

Sự cho phép này được đóng gói trong mỗi Collection Nhóm dự án và trong Server Configuration. Điều này có nghĩa là nếu Người dùng A có quyền này trên TPC1, anh ta sẽ không được phép mạo danh người dùng khi nói chuyện với TPC2 hoặc Máy chủ Cấu hình. Tương tự, nếu Người dùng B có quyền này trên Máy chủ Cấu hình , người đó sẽ không thể mạo danh người dùng khi nói chuyện với bất kỳ Bộ sưu tập Dự án Nhóm nào.

1

Trước tiên, hãy để tôi làm rõ một điều trước tiên. Có vẻ như ứng dụng của bạn là một ứng dụng máy chủ, trong trường hợp đó không có giá trị trong việc sử dụng EnsureAuthenticated(). Nó chỉ là một mẹo điều chỉnh hiệu suất để giúp khách hàng UI/máy tính để bàn.

Quay lại vấn đề chính: - Nếu ứng dụng của bạn hoạt động như mong đợi khi bạn truy cập cục bộ nhưng không thành công khi bạn truy cập từ xa, vui lòng đọc tiếp, nếu không đây không phải là giải pháp cho bạn.

Lý do không thành công là vì SPN cần phải được thêm vào tài khoản dịch vụ trên thư mục hoạt động. Nó là cần thiết để xác thực Kerberos diễn ra.

Đây là điều mà nhóm TFS cần giải thích vì nhiều nhà phát triển sẽ quên nó trong khi tập trung vào công việc nó tay. Hi vọng điêu nay co ich.

Để tìm hiểu thêm về nguyên tắc cơ bản của Kerberos SPN và, hãy kiểm tra các nguồn lực:

Tôi hy vọng điều này sẽ giúp.

Cảm ơn!

Các vấn đề liên quan