Freigeben über


Benutzerauthentifizierungsprobleme mit dem WinNT-Anbieter für Active Directory-Dienstschnittstellen

In diesem Artikel werden Benutzerauthentifizierungsprobleme mit dem WinNT-Anbieter (Active Directory Service Interfaces, ADSI) beschrieben.

Gilt für: Windows 10 – alle Editionen
Ursprüngliche KB-Nummer: 218497

Zusammenfassung

Mit der ADSI OpenDsObject-Methode oder der Hilfsfunktion "ADsOpenDsObject C" können Sie beim Öffnen eines Objekts Authentifizierungsanmeldeinformationen für den Verzeichnisserver bereitstellen. Es gibt eine Reihe von Problemen, die Sie beachten sollten, wenn Sie diese Technik mit dem WinNT-Anbieter der Active Directory-Dienstschnittstellen verwenden.

Weitere Informationen

Der WinNT-Anbieter der Active Directory-Dienstschnittstellen verwendet die WNetAddConnection2-Funktion , um eine Verbindung mit \\servername\IPC$ herzustellen, um diese Anmeldeinformationen mit dem Remoteserver einzurichten. Diese Methode ist nützlich, da sie keine speziellen Berechtigungen für NT-Clients erfordert und unter Windows funktioniert und die Authentifizierung für nicht vertrauenswürdige Domänen unterstützt.

Leider gibt es mehrere Nachteile in der WNetAddConnection2-Funktion , und sie sind wie folgt:

  • Wenn bereits eine Verbindung mit dem Zielserver durch einen auf dem Clientcomputer ausgeführten Prozess hergestellt wurde, kann die WNetAddConnection2-Funktion keine neue Verbindung mit anderen Anmeldeinformationen als den Anmeldeinformationen herstellen, die für die vorhandene Verbindung verwendet werden.

    Wenn Sie versuchen, ein neues Konto zu authentifizieren, erhalten Sie einen Fehler bei widersprüchlichen Anmeldeinformationen.If you try to authenticate a new account, you will get a conflicting credentials error. Wenn Sie versuchen, das vorhandene Konto zu authentifizieren, funktioniert jedes Kennwort (gültig oder nicht). Dies ist ein besonderes Problem, wenn Sie Objekte von einem Domänencontroller abrufen, bei dem viele Systemprozesse Verbindungen mit Domänencontrollern herstellen.

  • Wenn das Gastkonto auf dem Zielcomputer aktiviert ist, ist es möglich, sowohl einen ungültigen Benutzernamen als auch ein Kennwort zu übergeben und eine Verbindung zu erstellen.

  • Das System verweist nicht auf Die Anzahl von Verbindungen. Wenn ein Prozess, einschließlich des Clientprozesses der Active Directory-Dienstschnittstellen, die Verbindung löscht, müssen alle Prozesse, die diese Verbindung verwenden, geschrieben werden, um sie erneut herzustellen, wenn sie gefunden haben, dass sie gelöscht wurde.

Wenn Sie den WinNT-Anbieter verwenden, empfiehlt es sich, sich beim Zielserver zu authentifizieren, indem Sie sich mit entsprechenden Anmeldeinformationen bei einem Domänenkonto anmelden oder die LogonUser-Funktion (die erhöhte Berechtigungen erfordert) vor dem Ausführen des Active Directory-Dienstschnittstellencodes verwenden. Außerdem wird empfohlen, die OpenDsObject-Methode der Active Directory-Dienstschnittstellen nicht zum Überprüfen der Anmeldeinformationen eines Benutzers für jede Domäne zu verwenden, die von Ihrem Clientcomputer als vertrauenswürdig eingestuft wird.

Wenn Sie versuchen, Konten aus nicht vertrauenswürdigen Domänen zu überprüfen, verwenden Sie die OpenDsObject-Methode der Active Directory-Dienstschnittstellen, wobei die oben aufgeführten Probleme beachtet werden, und das Verständnis, dass Sie unverschlüsselte Kennwörter über das Netzwerk senden. Sie können diese Einschränkungen umgehen, indem Sie Validierungscode als Dienst auf mindestens einem Server in jeder Gruppe nicht vertrauenswürdiger Domänen ausführen, indem Sie eine SSL-Verbindung (oder HTTPS) verwenden, um Verschlüsselung bereitzustellen. Dazu verwenden Sie eine Überprüfungsdatei .asp Datei auf einem IIS-Server in jeder Gruppe nicht vertrauenswürdiger Domänen und stellen mithilfe der Standardauthentifizierung eine Verbindung mit dieser über HTTPS her.

Die OpenDsObject-Methode der Active Directory-Dienstschnittstellen verwendet die Anmeldeinformationen des angemeldeten Benutzers, um auf IIS zuzugreifen. Der Benutzername und das Kennwort, das als Parameter angegeben wird, werden ignoriert. Sie erhalten die folgende Fehlermeldung:

Zugriff verweigert

Dies funktioniert jedoch, nachdem der angemeldete Benutzer des Clients der Gruppe "Administratoren" des Servers hinzugefügt wurde.

Es funktioniert auch, wenn Sie den folgenden Skriptcode verwenden.

Set objLogon = CreateObject("LoginAdmin.ImpersonateUser")  
objLogon.Logon "Administrator", "AdminPassword", "Machinename"  
Set oNS = GetObject("IIS:")
Set oRoot = oNS.OpenDSObject("IIS://SERVER/SHARE", "Mordor\administrator", "Gollum", 1)'User credentials are ignored  
objLogon.Logoff
Set objLogon = Nothing