Binden mit ADsOpenObject und IADsOpenDSObject::OpenDSObject

Die ADsOpenObject-Funktion und die IADsOpenDSObject::OpenDSObject-Methode werden verwendet, um eine Bindung an Verzeichnisdienstobjekte durchzuführen, wenn alternative Anmeldeinformationen angegeben werden müssen und datenverschlüsselung erforderlich ist.

Die Anmeldeinformationen des aufrufenden Threads sollten nach Möglichkeit verwendet werden. Wenn jedoch alternative Anmeldeinformationen verwendet werden müssen, müssen die ADsOpenObject-Funktion oder die IADsOpenDSObject::OpenDSObject-Methode verwendet werden. Wenn alternative Anmeldeinformationen verwendet werden, ist es wichtig, das Kennwort nicht zwischenzuspeichern. Mehrere Bindungsvorgänge können ausgeführt werden, indem Der Benutzername und das Kennwort für den ersten Bindungsvorgang und dann nur der Benutzername in nachfolgenden Bindungen angegeben werden. Das System richtet eine Sitzung beim ersten Aufruf ein und verwendet dieselbe Sitzung für nachfolgende Bindungsaufrufe, solange die folgenden Bedingungen erfüllt sind:

  • Der gleiche Benutzername in jedem Bindungsvorgang.
  • Implementieren Sie bei jedem Bindungsvorgang eine serverlose Bindung oder bindung an denselben Server.
  • Verwalten Sie eine geöffnete Sitzung, indem Sie einen Objektverweis aus einem der Bindungsvorgänge beibehalten. Die Sitzung wird geschlossen, wenn der letzte Objektverweis freigegeben wird.

ADsOpenObject und IADsOpenDSObject::OpenDSObject verwenden die Windows NT Security Support Provider Interfaces (SSPI), um Flexibilität bei den Authentifizierungsoptionen zu ermöglichen. Der Hauptvorteil der Verwendung dieser Schnittstellen besteht darin, verschiedene Authentifizierungstypen für Active Directory-Clients bereitzustellen und die Sitzung zu verschlüsseln. Derzeit lässt ADSI nicht zu, dass Zertifikate übergeben werden. Daher können Sie SSL für die Verschlüsselung und dann Kerberos, NTLM oder die einfache Authentifizierung verwenden, je nachdem, wie die Flags für den dwReserved-Parameter festgelegt werden.

Sie können keinen bestimmten SSPI-Anbieter in ADSI anfordern, obwohl Sie immer das Protokoll mit der höchsten Präferenz erhalten. Im Fall einer Windows Clientbindung an einen Computer, auf dem Windows ausgeführt wird, ist das Protokoll Kerberos. Das Zulassen eines Zertifikats für die Authentifizierung ist im Fall einer Webseite akzeptabel, da die Authentifizierung vor dem Ausführen der Webseite erfolgt.

Obwohl Open-Vorgänge es Ihnen ermöglichen, einen Benutzer und ein Kennwort anzugeben, sollten Sie dies nicht tun. Geben Sie stattdessen keine Anmeldeinformationen an, und verwenden Sie implizit die Anmeldeinformationen des Sicherheitskontexts des Aufrufers. Um eine Bindung an ein Verzeichnisobjekt mithilfe der Anmeldeinformationen des Aufrufers mit ADsOpenObject oder IADsOpenDSObject::OpenDSObjectzu erstellen, geben Sie NULL für Benutzername und Kennwort an.

Verwenden Sie abschließend das ADS _ NO _ AUTHENTICATION-Flag, um eine Bindung ohne Authentifizierung durchzuführen. Keine Authentifizierung gibt an, dass ADSI versucht, als anonymer Benutzer an das Zielobjekt zu binden, und führt keine Authentifizierung durch. Dies entspricht der Anforderung anonymer Bindungen in LDAP und gibt an, dass alle Benutzer im Sicherheitskontext enthalten sind.

Wenn die Authentifizierungsflags auf 0 (null) festgelegt sind, führt ADSI eine einfache Bindung aus, die als Klartext gesendet wird.

Achtung

Wenn ein Benutzername und ein Kennwort ohne Angabe von Authentifizierungsflags angegeben werden, werden Benutzername und Kennwort in Klartext über das Netzwerk übertragen, was ein Sicherheitsrisiko darstellt. Geben Sie keinen Benutzernamen und kein Kennwort an, ohne Authentifizierungsflags anzugeben.

Beispiele

Im folgenden Visual Basic Codebeispiel wird die Verwendung der IADsOpenDSObject::OpenDSObject-Methode veranschaulicht.

Dim openDS As IADsOpenDSObject
Dim usr As IADsUser
 
Set openDS = GetObject("LDAP:")
 
openDS.OpenDSObject("LDAP://CN=jeffsmith,DC=fabrikam,DC=com",
    NULL, 
    NULL,
    ADS_SECURE_AUTHENTICATION)

Im folgenden C++-Codebeispiel wird die Verwendung der ADsOpenObject-Funktion veranschaulicht.

IADs *pObject;
HRESULT hr;

hr = ADsOpenObject(L"LDAP://CN=jeffsmith,DC=fabrikam,DC=com",
    NULL, 
    NULL,
    ADS_SECURE_AUTHENTICATION, 
    IID_IADs,
    (void**)&pObject);
if(SUCCEEDED(hr))
{
    // Use the object.

    // Release the object.
    pObject->Release()
}

Die IADsOpenDSObject-Schnittstelle kann auch in C++ verwendet werden, dupliziert jedoch die ADsOpenObject-Funktion.

Das folgende C++-Codebeispiel zeigt, wie Sie die IADsOpenDSObject-Schnittstelle verwenden, um den gleichen Bindungsvorgang wie im obigen Codebeispiel auszuführen.

IADsOpenDSObject *pDSO;
HRESULT hr;
 
hr = ADsGetObject(L"LDAP:", IID_IADsOpenDSObject, (void**)&pDSO);
if(SUCCEEDED(hr))
{
    IDispatch *pDisp;

    hr = pDSO->OpenDSObject(CComBSTR("LDAP://CN=jeffsmith,DC=fabrikam,DC=com"),
        NULL,
        NULL,
        ADS_SECURE_AUTHENTICATION, 
        &pDisp);
    if(SUCCEEDED(hr))
    {
        IADs *pObject;

        hr = pDisp->QueryInterface(IID_IADs, (void**) &pObject);
        if(SUCCEEDED(hr))
        {
            // Use the object.

            // Release the object.
            pObject->Release();
        }

        pDisp->Release();
    }
    
    pDSO->Release();
}