Ich habe eine ASP.NET-Anwendung, die einen WMI-Aufruf an ein Remote-System ausführt. Die Anwendung Web.config enthält < identity impersonate = "true" > und < authentication mode = "Windows" > Optionen, die, wie ich verstehe, die Ausführung des Anwendungscodes im Namen des Anwendungsbenutzers erzwingen sollte.WMI-Zugriff verweigert Fehler beim Abfragen von Remotecomputer von ASP.NET
Das Problem ist, dass ich bekomme "Zugriff verweigert" -Fehler, trotz der Tatsache, kann ich erfolgreich die meine WMI-Anfrage von PowerShell-Konsole auf dem gleichen Host unter dem gleichen Benutzer auf den betreffenden Remote-Server ausführen.
// this doesn't work
ManagementScope scope = new ManagementScope();
scope.Path.NamespacePath = "root\\virtualization";
scope.Path.Server = "vs01";
scope.Connect(); // <-- here comes exception
# this works just fine
Get-WmiObject -Namespace 'root\virtualization' -Class Msvm_ComputerSystem -ComputerName vs01
Dumping HttpContext.Current.User.Identity.Name, System.Security.Principal.WindowsIdentity.GetCurrent(). Name vorschlagen System.Threading.Thread.CurrentPrincipal.Identity.Name Eigenschaften, die Identitätswechsel wie erwartet funktioniert .
Ideen? Könnte das Problem eine Art von .NET- oder IIS-Sicherheit sein?
Vielen Dank, Delegation Berechtigungen teilweise geholfen. Jetzt kann ich einen Anruf tätigen, aber ich muss meine Zugangsdaten eingeben, wenn ich auf die Seite mit dem WMI-Code zugreife. –
UPDATE: IE funktioniert gut. Firefox und Chrome scheinen anders zu funktionieren. Ich schätze, sie liefern keine vollständigen Kerberos-Informationen, die für die Delegierung erforderlich sind. –
IE implementiert das SPNEGO-Authentifizierungsprotokoll (Kerberos/NTLM), mit dem Sie sich einmalig anmelden können. Ich glaube nicht, dass Firefox/Chrome dies standardmäßig implementiert. Was Sie also sehen, ist die NTLM Pass-Through-Authentifizierung. Dies ist ein Grund, um IE für interne Apps in einer Windows-Domäne zu standardisieren. – DSO