Estoy tratando de crear una página ASP.NET que agregue un elemento de trabajo en TFS.IIS7 Suplantación de identidad no funciona para acceder al repositorio de TFS
He permitido suplantación y la autenticación de Windows:
<authentication mode="Windows" />
<identity impersonate="true" password="" userName="" />
<customErrors mode="Off" />
En la página, puedo acceder a TFS y trato de añadir un elemento de trabajo:
TfsTeamProjectCollection prjCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("xxx"));
WorkItemStore store = prjCollection.GetService<WorkItemStore>();
...
Sin embargo, sólo funciona cuando selecciono SpecificUser en ASP.NET Suplantación de identidad y almacenar las credenciales. No funciona cuando se selecciona Usuario autenticado.
He comprobado que el Usuario Específico es el mismo que el Autenticado, pero obtengo errores de permiso en este último caso (lo que indica que la suplantación no funciona correctamente).
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)
las siguientes variables tienen el mismo para ambos casos:
HttpContext.Current.Request.LogonUserIdentity.Name
HttpContext.Current.Request.IsAuthenticated
HttpContext.Current.User.Identity.Name
System.Environment.UserName
System.Security.Principal.WindowsIdentity.GetCurrent().Name
¿Alguna idea?
EDIT:
De hecho, como Juan menciona a continuación, el problema es causado por la delegación de Kerberos .
que he encontrado el siguiente artículo y una herramienta que acompaña muy útil para explicar y mitigar esto:
DelegConfig - A Tool To help resolve Kerberos authentication and delegation issues
+1 ... acaba de implementar un conjunto de herramientas de interfaz web basadas en la web, que interactúan con tfs, en "otra máquina" como una aplicación web en iis. Estoy observando el mismo comportamiento que el descrito en esta publicación. ¿Alguna solución provisional conocida? gracias por adelantado. – culturalanomoly
Sí. Haga clic en el enlace "doble salto" en mi respuesta. –