2012-03-14 7 views
7

तक पहुंचने के लिए काम नहीं करता है। मैं एक एएसपी.NET पृष्ठ बनाने की कोशिश कर रहा हूं जो टीएफएस में एक कार्य आइटम जोड़ता है।आईआईएस 7 प्रतिरूपण टीएफएस रिपोजिटरी

मैं प्रतिरूपण और Windows प्रमाणीकरण सक्षम है

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

पेज में, मैं TFS का उपयोग और एक काम आइटम जोड़ने के लिए प्रयास करें:

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

हालांकि, यह केवल काम करता है जब मैं चयन एएसपी.NET प्रतिरूपण में विशिष्ट उपयोगकर्ता और प्रमाण-पत्र संग्रहित करें। यह काम नहीं करता है जब प्रमाणीकृत उपयोगकर्ता चयनित है।

मैंने जांच की है कि विशिष्ट यूज़र प्रमाणीकृत के समान है, लेकिन मुझे बाद के मामले में अनुमति त्रुटियां मिलती हैं (जो इंगित करती है कि प्रतिरूपण सही ढंग से काम नहीं करता है)।

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) 

निम्न चर दोनों ही मामलों के लिए एक ही लग रही है:

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

कोई भी विचार?

संपादित करें:

दरअसल, के रूप में जॉन नीचे उल्लेख किया है, इस मुद्दे को Kerberos डेलिगेशन के कारण होता है।

Kerberos Delegation

मैं निम्न आलेख और साथ उपकरण को समझा और इस को कम करने में बहुत उपयोगी पाया गया है:

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

Kerberos Delegation Check

उत्तर

7

मुझे लगता है कि आपके पास "double hop" समस्या हो सकती है।

+0

+1 ... बस आईआईएस पर एक वेब ऐप के रूप में "अन्य मशीन" पर, टीएफएस के साथ इंटरफेस, वेब आधारित यूई टूल्स का एक सेट तैनात किया गया। मैं इस पोस्ट में वर्णित वही व्यवहार देख रहा हूं। कोई ज्ञात कामकाज? अग्रिम में धन्यवाद। – culturalanomoly

+0

हाँ। मेरे उत्तर में "डबल हॉप" लिंक पर क्लिक करें। –

0

कौन आईआईएस अनुप्रयोग के लिए अनुप्रयोग पूल है के रूप में चल रहा है? डिफ़ॉल्ट रूप से, मुझे लगता है कि यह IIUSR खातों में से एक है और आवश्यक रूप से एक डोमेन खाता नहीं है जो TFS सर्वर के लिए प्रमाण-पत्र के साथ है।

+0

यह डिफ़ॉल्ट ApplicationPoolIdentity का उपयोग करता है, लेकिन इसलिए मैंने प्रतिरूपण सेट कर दिया है, ताकि टीएफएस को उपयोगकर्ता के प्रमाण-पत्रों के साथ एक्सेस किया जा सके। –

2

this लेख के आधार पर यह EnsureAuthenticated();

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

मैं कभी भी इस प्रयास नहीं किया है को जोड़ने के लिए एक शॉट के लायक है, इसलिए मैं केवल यह आशा कर सकते हैं 'll काम करते हैं।