Unter welchem ​​Konto wird ASP (klassisch) ausgeführt, wenn die integrierte Windows-Authentifizierung aktiviert ist?

Unter welchem ​​Konto wird ASP (klassisch) ausgeführt, wenn die integrierte Windows-Authentifizierung aktiviert ist?

Ich habe eine ASP-Datei, die versucht, eine Webservice-Anforderung an einen ASP.NET-Webservice zu stellen, der auf demselben Server im selben virtuellen Verzeichnis ausgeführt wird. In IIS ist das virtuelle Verzeichnis so eingerichtet, dass anonymer Zugriff deaktiviert ist und die „integrierte Windows-Authentifizierung“ aktiviert ist.

Das Problem besteht darin, dass, wenn der Computer des Benutzers die Ausführung der ASP-Seite anfordert oder sogar die .NET-Datei WebService.asmx manuell ausführt, dies funktioniert, weil die Anmeldeinformationen des Benutzers weitergegeben werden. Wenn die ASP-Datei jedoch versucht, den Webdienst aufzurufen, erhalten wir eine 401.2-Meldung – Nicht autorisiert: Der Zugriff wurde aufgrund der Serverkonfiguration verweigert.

Zum Beispiel:

  • „DIRECTORY\user1“ von einem Browser auf dem Benutzercomputer fordert Service.asmx an, was problemlos funktioniert.
  • „DIRECTORY\user1“ von einem Browser auf dem Benutzercomputer fordert File1.asp an, was problemlos funktioniert.
  • _________ aus File1.asp auf dem Server fordert Service.asmx an, das 401.2 zurückgibt

Ich nahm also an, dass ich NTFS-Berechtigungen für WebService.asmx festlegen muss, um dem ASP-Konto Lese- und Ausführungsberechtigungen zu erteilen, weiß aber nicht, unter welchem ​​Konto es ausgeführt wird. Und nach weiterem Überlegen und Lesen einiger Antworten scheint es, als würden wir nicht auf die NTFS-Ebene gelangen. IIS lehnt die Anforderung vollständig ab, da der anonyme Zugriff deaktiviert ist.

Bedeutet dies, dass wir den ASP-Prozess unter einem Domänenkonto ausführen müssen?

Antwort1

Classic ASP wird ausgeführt und gibt den Benutzer an, der in der HTTP-Sitzung gegenüber dem Server authentifiziert ist. Sie müssen den Benutzern, die sich authentifizieren, die Berechtigung erteilen, die klassische ASP-Anwendung auszuführen, oder anonymen Zugriff zulassen.

Wenn Sie es bereits mit „Authentifizierte Benutzer“ versucht haben und es nicht funktioniert, würde ich sagen, dass Sie kein Problem mit den Dateiberechtigungen haben.

Was meinen Sie, wenn Sie sagen „...die ASP-Datei versucht, den Webdienst aufzurufen...“? Wollen Sie damit sagen, dass das ASP-Skript eine HTTP-Anforderung an den Server zurücksendet? Wenn ja, werden die Anmeldeinformationen des Benutzers in dieser Anforderung nicht weitergegeben, da die „Integrierte Windows-Authentifizierung“ dem Server kein Klartextkennwort zur Verfügung stellt, das er bei der Authentifizierung gegenüber anderen Servern (oder sich selbst) verwenden kann.

Bearbeiten:

Ihrem Kommentar zufolge verfügt der Server, wie oben dargelegt, über keine Anmeldeinformationen zur Authentifizierung des Benutzers, da die integrierte Windows-Authentifizierung dem Server kein Klartextkennwort bereitstellt, das er an andere Server (oder an sich selbst, was in diesem Fall ein anderer Server ist) weitergeben kann.

Drei Dinge, die Sie versuchen könnten:

  • Wenn Sie WebService.asmx dazu bringen können, anonymen Zugriff zuzulassen, sollte Ihr Server-zu-sich-HTTP-Aufruf funktionieren (Sie müssen den anonymen Zugriff explizit zulassen, indem Sie IUSR_xxx erlauben, die Datei zu lesenUndindem Sie die Einstellung „Anonymer Zugriff und Authentifizierungssteuerung“ für „Anonymen Zugriff“ in der Datei selbst über das Snap-In der IIS-Verwaltungskonsole ändern, da diese Datei die aktivierte „Integrierte Windows-Authentifizierung“ und die deaktivierte Einstellung „Anonymer Zugriff“ von dem Verzeichnis erbt, in dem sie sich befindet).

  • Wenn das Steuerelement, das Sie zum Senden der HTTP-Anforderung verwenden, die transparente Bereitstellung der Anmeldeinformationen des angemeldeten Benutzers an den Remote-Server unterstützt, können Sie im klassischen ASP-Skript die „Basisauthentifizierung“ aktivieren (wodurch dem Server ein Klartextkennwort zur Weitergabe an andere Server bereitgestellt wird), sodass Ihr HTTP-Anforderungssteuerelement dieses Klartextkennwort während der Anforderung für WebService.asmx weitergeben kann. Sie sollten an dieser Stelle SSL für den Zugriff auf das klassische ASP-Skript anfordern, um Klartextkennwörter fernzuhalten.

  • Schließlich könnten Sie einfach einige grundlegende Authentifizierungsdaten im klassischen ASP-Skript fest codieren und die grundlegende Authentifizierung in der Datei WebService.asmx aktivieren. Das bedeutet, dass WebService.asmx immer Zugriffe desselben Benutzers erkennt.

Keine dieser Lösungen ist besonders gut. Sie stoßen auf ein „klassisches“ Problem, das wir bei „klassischem ASP“ festgestellt haben, als Sie versuchten, sich bei einer Back-End-Ebene (Datenbank usw.) als der Benutzer zu authentifizieren, der sich für die Ausführung des klassischen ASP-Skripts authentifiziert hat.

Antwort2

Wenn die integrierte Authentifizierung aktiviert ist und der Benutzer einen Browser verwendet, der die integrierte Windows-Authentifizierung durchführtUndDer Benutzer ist mit einem Konto angemeldet, das auf einen Webserver übertragen wird (beispielsweise befindet sich der Clientcomputer in derselben Domäne wie der Webserver). Anschließend wird Ihr Skript unter dem Konto dieses Benutzers ausgeführt.

Wenn einer der oben genannten Punkte falsch ist (der Server also keinem Benutzerkonto mit dem Client-Browser zustimmen kann), wird standardmäßig der von Ihnen für den anonymen Zugriff festgelegte Benutzer verwendet. IUSR_<machine>Ist das anonyme Surfen deaktiviert, erhält der Benutzer die Fehlermeldung 401.*.

Dies setzt voraus, dass andere Authentifizierungsmethoden deaktiviert sind. Ich bin nicht sicher, was Vorrang hat, wenn Sie sowohl das integrierte Windows-Authentifizierungsschema als auch das grundlegende Authentifizierungsschema gleichzeitig aktiviert haben.

Sie können den Benutzer sehen, den der Webserver derzeit für Anfragen an einen bestimmten Bereich verwendet, indem Sie ein Skript einfügen, das die Sammlung „reqeust.servervariables“ abfragt und die relevanten Werte ausgibt – der Benutzername ist dort enthalten.

Antwort3

Sieht aus, als würden Sie versuchen, eine „Double-Hop“-Authentifizierung durchzuführen. Normalerweise geschieht dies im Kontext eines Backend-SQL-Dienstes, aber ich glaube, es könnte auch für einen separaten Dienst gelten, der auf demselben Server ausgeführt wird (ich bin mir jedoch nicht 100 % sicher). Suchen Sie in MSKB nach dem Begriff „Double Hop“ und Sie erhalten einige Dokumente, die erklären, wie Sie die Delegation einrichten, damit dies funktioniert. Hier ist eines für den Anfang:http://support.microsoft.com/kb/326985

Sie müssen den IIS-Server auf „Delegation erlaubt“ einstellen. Wenn der Benutzer über die integrierte Windows-Authentifizierung authentifiziert wird, sollte er ein Kerberos-Ticket erhalten (dies funktioniert NICHT, wenn Sie eine NTLM-Authentifizierung verwenden).

Um eine Delegierung durchzuführen, müssen Sie dem Server einen SPN hinzufügen. Stellen Sie sicher, dass die Benutzer mit dem tatsächlichen FQDN auf die Webseite gelangen, für den der Server in AD einen SPN hat. Der Service Principal Name (SPN) wird vom Kerberos-Agent des Benutzers verwendet, um das richtige Kerberos-Ticket zu erstellen, das es dem IIS-Server ermöglicht, sich als Benutzer auszugeben, wenn er die Anfrage an den nächsten Dienst weitergibt.

Antwort4

Ist es wichtig, dass der Webdienst die Anmeldeinformationen des angemeldeten Benutzers verwendet? Wenn Sie zum Aufrufen des Webdiensts etwas wie MSXML2.ServerXMLHTTPRequest verwenden, könnten Sie dann einfach Anmeldeinformationen in der Methode .Open angeben, um dem Webdienst einen festen Satz von Anmeldeinformationen bereitzustellen?

verwandte Informationen