So versuche ich eine Webanwendung (C#, asp.net 4.5) zu entwickeln, die Windows-Identität und Identitätswechsel verwendet, um eine Verbindung zu TFS (Team Foundation Server) und ruft einige Elemente (Arbeitsaufgaben, Aufgaben, usw.). Das Problem besteht darin, dass der Identitätswechsel nur auf dem Server funktioniert, auf dem die App ausgeführt wird, wie nur für meine Identität. Jedes Mal, wenn jemand versucht, eine Verbindung herzustellen, wird ihr Zugriff verweigert. Die App stürzt ab, wenn ein nicht autorisierter Fehler auftritt. "TF30063: Sie sind nicht berechtigt, auf [Serveradresse] zuzugreifen". Sicherlich sind die anderen Personen autorisiert, weil sie direkt auf TFS zugreifen können (nicht über meine App) und einige von ihnen sind Administratoren.Imitieren in C#, asp.net, Windows Identität
Die Strecke von Code, der den Fehler zurückgibt, ist dies ein
protected TfsTeamProjectCollection TeamProjectCollection
{
get
{
if (tpc == null)
{
// I HAVE ALSO TRIED THIS COMMENTED OUT PART, TOO. Still doesn't work.
// using (WindowsIdentity.GetCurrent().Impersonate())
// {
// tpc = new TfsTeamProjectCollection(new Uri(ConnectionString));
// }
var identityDescriptor = Microsoft.TeamFoundation.Framework.Client.IdentityHelper.CreateDescriptorFromSid(WindowsIdentity.GetCurrent().User);
tpc = new TfsTeamProjectCollection(new Uri(ConnectionString), identityDescriptor);
}
return tpc;
}
}
Hat jemand anderes dies zuvor begegnet? Ich habe Tage damit verbracht, im Internet zu recherchieren, habe aber keine Antwort gefunden, die funktioniert. Hoffe ihr könnt mir helfen! Andere Erwähnungen: in web.config habe ich "Identität impersonate = true" gesetzt, in iis habe ich ASP.NET-Identitätswechsel und Windows-Authentifizierung aktiviert. Alle anderen Authentifizierungsoptionen sind deaktiviert.
Ich denke, Sie müssen 'HttpContext.Current.User.Identity' anstelle von' WindowsIdentity.GetCurrent() 'verwenden. –
Nein, tut mir leid. Ich wünschte, es wäre so einfach. Sie können httpcontext.cu nicht an den Deskriptor übergeben. Es braucht einen Parameter, der eine sid sein muss, also ist das kein gültiger Typ. Habe das gerade versucht. Danke trotzdem. –
Ich habe keine richtige Antwort gegeben, weil ich mir über die Details nicht sicher bin. Ich bin jedoch ziemlich sicher, dass "WindowsIdentity.GetCurrent()" die Identität ist, die vom IIS-Arbeitsprozess verwendet wird, der ein Dienstkonto ist und nicht das, was Sie beim Zugriff auf TFS verwenden möchten. 'HttpContext.Current.User.Identity' liefert Ihnen die Identität des aktuellen Benutzers (der Benutzer im Browser) und Sie müssen dies in das gewünschte Formular für die Verwendung durch TFS in irgendeiner Weise übersetzen. Wenn Sie eine SID benötigen und nur einen Benutzernamen wie "DOMAIN \ USER" haben, müssen Sie diesen Benutzernamen einer SID in Ihrem Code zuordnen. –