mache eine HTTP-Post vom Server mit Benutzerdaten - integrierte Sicherheit
-
20-08-2019 - |
Frage
Ich versuche, einen Beitrag von einer asp klassischen Server-Seite-Seite zu machen, um die Benutzer-Anmeldeinformationen ...
Ich verwende MSXML2.ServerXMLHTTP programmatisch die Post zu machen
Ich habe in der IIS 5.1-Website mit mehreren Konfigurationen ausprobiert, aber es gibt keinen Weg, ich IIS Lauf mit einem bestimmten Konto machen ...
habe ich eine wenig asp-Seite, die whoami läuft, um zu überprüfen, was die IIS-Prozess-Konto i mit ...
mit IIS 5.1, mit integrierten Sicherheit des Prozess verwendet:
my_machine \ IWAM_my_machine
ich deaktivieren integrierte Sicherheit, und ein Domänenkonto als den anonymen Zugriff verlassen, und ich bekomme die gleiche (¿?)
, um den Benutzer zu testen ich folgendes tun
private function whoami()
dim shell, cmd
set shell = createObject("wscript.shell")
set cmd = shell.exec( server.mapPath( "whoami.exe" ) )
whoami = cmd.stdOut.readAll()
set shell = nothing: set cmd = nothing
end function
ist es, weil ich einen Shell-Befehl ausgeben?
Ich mag http Post Anrufe, an einem anderen Ort machen, die mit integrierten Sicherheits funktionieren ...
Also ich brauche etwas, um die Anmeldeinformationen zu übergeben, oder zumindest mit einem bestimmten Konto ausgeführt, und konfigurieren Sie dann die Remote-Site Schub, Konto ...
dachte ich, dass gerade die Seite Einstellung mit integrierten Sicherheit zu arbeiten, würde ausreicht, um ...
Wie kann ich so etwas erreichen?
ps: mit IIS6, geschieht das gleiche aber wenn ich den Pool canfiguration ändern bekomme ich folgende Informationen von whoami
NT AUTHORITY \ NETWORK SERVICE
NT AUTHORITY \ Lokaler Dienst
NT AUTHORITY \ SYSTEM
wenn ich ein Domain-Konto einrichten, erhalte ich eine „Dienst nicht verfügbar“ Meldung ...
edit: Google
es sagt, was ich supossed: „Wenn ein authentifizierter Benutzer eine Anforderung macht, wird die Thread-Token auf dem authentifizierten Konto des Benutzers basiert“, aber irgendwie scheine ich nicht so arbeiten ... was könnte ich fehlt?
edit:
auch die whoami Sache offensichtlich täuscht mich, habe ich versucht, mit der folgenden Funktion
private function whoami_db( serverName, dbName )
dim conn, data
set conn = server.createObject("adodb.connection")
conn.open "Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Initial Catalog=" & dbName & ";Data Source=" & serverName
set data = conn.execute( "select suser_sname() as user_name" )
whoami_db = data("user_name")
data.close: conn.close
set data = nothing: set conn = nothing
end function
und alles schien zu funktionieren gut ...
aber wie kann ich MSXML2.ServerXMLHTTP Arbeit mit den Benutzerdaten ???
machenLösung
Sie sind richtig whoami.exe Sie war verwirrend. einen separaten Prozess startet, verursacht der neue Prozess als der Benutzer des aktuellen Prozesses ausgeführt wird. Auf XP, die COM + -Anwendung Host (DLLHOST) und würde normalerweise laufen als IWAM_<machine>
wäre. Auf IIS6 wäre es der w3wp.exe Arbeitsprozess und in der Regel läuft als NT AUTHORITY \ Network Service.
jedoch ein Thread eine HTTP-Anfrage ist eine andere Sicherheits-Token ausgeben. Mit integrierten Sicherheit, wie Sie dies würde das Sicherheitstoken des Benutzers entdeckt hat, den die Anfrage, wie Ihr SSPI Experiment trägt aus. Mit den anonymen Zugriff der anonyme Benutzer konfiguriert auf der Website / Anwendung verwendet wird, ist dies in der Regel <MACHINE>\IUSR_<machine>
.
In Bezug auf Ihr spezielles Problem mit ServerXMLHTTP dies geht zurück auf die darunter liegende Komponente WinHTTP. Dies wird standardmäßig nur die aktuellen Benutzer-Anmeldeinformationen senden, wenn der Server die Proxy-Umgehungsliste zugegriffen werden. Selbst dann möglich, es der ServerXMLHTTP konfiguriert es nie Anmeldeinformationen, die Benutzer zu senden, habe ich nicht dieses Szenario selbst testen.
Leider ServerXMLHTTP bietet sehr begrenzten Zugriff auf die Konfigurationsdetails auf WinHTTP. Allerdings, wenn diese eine Show Stopper dann könnte man immer die WinHTTP Komponente verwenden, um direkt selbst: -
Dim oWinHTTP
Dim oDOM
Const AutoLogonPolicy_Always = 0
Set oWinHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
oWinHTTP.SetAutoLogonPolicy AutoLogonPolicy_Always
oWinHTTP.Open "GET", "http://remoteserver.org/getsomexml.xxx", False
oWinHTTP.Send
If oWinHTTP.Status = 200 Then
Set oDOM = CreateObject("MSXML2.DOMDocument.3.0")
oDOM.async = false
oDOM.Load oWinHTTP.ResponseStream
End If
Set oWinHTTP = Nothing
Das sollte für http arbeiten, für https es wird wirklich chaotisch.