2012-03-14 19 views
7

Tôi đang cố gắng xây dựng một trang ASP.NET bổ sung thêm một mục công việc trong TFS.IIS7 Mạo danh không hoạt động để truy cập kho lưu trữ TFS

tôi đã kích hoạt mạo danh và Windows xác thực:

<authentication mode="Windows" /> 
<identity impersonate="true" password="" userName="" /> 
<customErrors mode="Off" /> 

Trong trang này, tôi truy cập TFS và cố gắng thêm một hạng mục công trình:

TfsTeamProjectCollection prjCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("xxx")); 
WorkItemStore store = prjCollection.GetService<WorkItemStore>(); 
... 

Tuy nhiên, nó chỉ hoạt động khi tôi chọn SpecificUser trong Mạo danh ASP.NET và lưu trữ thông tin đăng nhập. Nó không hoạt động khi Người dùng được xác thực được chọn.

Tôi đã kiểm tra xem SpecificUser có giống với xác thực không, nhưng tôi nhận được các lỗi quyền trong trường hợp sau (điều này cho biết rằng mạo danh không hoạt động chính xác).

TF30063: You are not authorized to access XXX. ---> System.Net.WebException: The remote server returned an error: (401) Unauthorized. 
    at System.Net.HttpWebRequest.GetResponse() 
    at  Microsoft.TeamFoundation.Client.TeamFoundationClientProxyBase.AsyncWebRequest.ExecRequest(Object obj) 
    --- End of inner exception stack trace --- 
    at  Microsoft.TeamFoundation.Client.TeamFoundationClientProxyBase.ProcessHttpResponse(HttpWebResponse response, Stream responseStream, WebException webException, XmlReader& xmlResponseReader) 
    at Microsoft.TeamFoundation.Client.TeamFoundationClientProxyBase.ExecWebServiceRequest(HttpWebRequest request, XmlWriter requestXml, String methodName, HttpWebResponse& response) 
    at Microsoft.TeamFoundation.Framework.Client.LocationWebService.Connect(Int32 connectOptions, ServiceTypeFilter[] serviceTypeFilters, Int32 lastChangeId) 
    at Microsoft.TeamFoundation.Framework.Client.FrameworkServerDataProvider.Connect(ConnectOptions connectOptions) 
    at Microsoft.TeamFoundation.Framework.Client.FrameworkServerDataProvider.EnsureConnected(ConnectOptions optionsNeeded) 
    at Microsoft.TeamFoundation.Framework.Client.FrameworkServerDataProvider.get_InstanceId() 
    at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.InitializeInternal() 
    at Microsoft.TeamFoundation.Client.TfsTeamProjectCollection.InitializeTeamFoundationObject(String fullName, Object instance) 
    at Microsoft.TeamFoundation.Client.TfsConnection.CreateServiceInstance(Assembly assembly, String fullName) 
    at Microsoft.TeamFoundation.Client.TfsConnection.GetService(Type serviceType) 
    at Microsoft.TeamFoundation.Client.TfsConnection.GetService[T]() 
    at ASP.index_aspx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) 

Các biến sau trông giống nhau cho cả hai trường hợp:

HttpContext.Current.Request.LogonUserIdentity.Name 
HttpContext.Current.Request.IsAuthenticated 
HttpContext.Current.User.Identity.Name 
System.Environment.UserName 
System.Security.Principal.WindowsIdentity.GetCurrent().Name 

Bất kỳ ý tưởng?

EDIT:

Thật vậy, như John đề cập dưới đây, vấn đề này là do Kerberos Phái đoàn.

Kerberos Delegation

tôi đã tìm thấy các bài viết sau đây và công cụ đi kèm rất hữu ích trong việc giải thích và giảm nhẹ này:

DelegConfig - A Tool To help resolve Kerberos authentication and delegation issues

Kerberos Delegation Check

Trả lời

7

Tôi nghĩ bạn có thể gặp sự cố "double hop".

+0

+1 ... vừa triển khai một bộ công cụ dựa trên web ui, giao diện đó với tfs, vào "một máy khác" làm ứng dụng web trên iis. Tôi đang quan sát hành vi tương tự như được mô tả trong bài đăng này. bất kỳ cách giải quyết đã biết nào? cảm ơn trước. – culturalanomoly

+0

Vâng. Nhấp vào liên kết "hop kép" trong câu trả lời của tôi. –

0

Ai là hồ bơi ứng dụng cho các ứng dụng IIS chạy như? Theo mặc định, tôi nghĩ rằng đó là một trong những tài khoản IIUSR và không nhất thiết phải là một tài khoản miền với thông tin đăng nhập cho máy chủ TFS.

+0

Nó sử dụng ApplicationPoolIdentity mặc định, nhưng đó là lý do tại sao tôi đã đặt mạo danh, để TFS có thể được truy cập bằng thông tin đăng nhập của người dùng. –

2

Dựa trên this bài viết, nó có giá trị một shot để thêm EnsureAuthenticated();

TfsTeamProjectCollection prjCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("xxx")); 
prjCollection.EnsureAuthenticated(); 
WorkItemStore store = prjCollection.GetService<WorkItemStore>(); 

Tôi đã không bao giờ cố gắng này, vì vậy tôi chỉ có thể hy vọng nó làm việc ll.

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