Delen via


Binden met ADsOpenObject en IADsOpenDSObject::OpenDSObject

De functie ADsOpenObject en de methode IADsOpenDSObject::OpenDSObject worden gebruikt om verbinding te maken met directoryserviceobjecten wanneer alternatieve referenties moeten worden opgegeven en wanneer gegevensversleuteling is vereist.

De inloggegevens van de aanroepende thread moeten indien mogelijk worden gebruikt. Als alternatieve referenties echter moeten worden gebruikt, moet de functie ADsOpenObject of de methode IADsOpenDSObject::OpenDSObject worden gebruikt. Als er alternatieve referenties worden gebruikt, is het belangrijk om het wachtwoord niet in de cache op te slaan. Er kunnen meerdere bindingsbewerkingen worden uitgevoerd door de gebruikersnaam en het wachtwoord voor de eerste bindingsbewerking op te geven en vervolgens alleen de gebruikersnaam in volgende bindingen op te geven. Het systeem stelt een sessie in voor de eerste oproep en gebruikt dezelfde sessie voor volgende bind-aanroepen zolang aan de volgende voorwaarden wordt voldaan:

  • Dezelfde gebruikersnaam in elke bindingsbewerking.
  • Implementeer serverloze binding of binding met dezelfde server in elke bindingsbewerking.
  • Onderhoud een open sessie door een objectverwijzing vanuit een van de bindingsbewerkingen vast te houden. De sessie wordt gesloten wanneer de laatste objectverwijzing wordt vrijgegeven.

ADsOpenObject en IADsOpenDSObject::OpenDSObject gebruikmaken van de SSPI-(Windows NT Security Support Provider Interfaces) om flexibiliteit in verificatieopties mogelijk te maken. Het belangrijkste voordeel van het gebruik van deze interfaces is het bieden van verschillende typen verificatie aan Active Directory-clients en het versleutelen van de sessie. Op dit moment staat ADSI niet toe dat certificaten worden doorgegeven. Daarom kunt u SSL gebruiken voor versleuteling en vervolgens Kerberos, NTLM of eenvoudige verificatie, afhankelijk van hoe de vlaggen zijn ingesteld op de parameter dwReserved.

U kunt geen specifieke SSPI-provider aanvragen in ADSI, hoewel u altijd het hoogste voorkeursprotocol krijgt. In het geval van een Windows-clientbinding met een computer met Windows, is het protocol Kerberos. Het is niet toegestaan om een certificaat voor verificatie toe te staan in het geval van een webpagina, omdat verificatie plaatsvindt voordat de webpagina wordt uitgevoerd.

Hoewel u met Open-bewerkingen een gebruiker en wachtwoord kunt opgeven, moet u dit niet doen. Geef in plaats daarvan geen referenties op en gebruik impliciet de referenties van de beveiligingscontext van de beller. Als u verbinding wilt maken met een mapobject met behulp van de referenties van de aanroeper met ADsOpenObject of IADsOpenDSObject::OpenDSObject, geeft u NULL op voor zowel gebruikersnaam als wachtwoord.

Gebruik ten slotte de vlag ADS_NO_AUTHENTICATION om te binden zonder verificatie. Geen verificatie geeft aan dat ADSI probeert te binden als anonieme gebruiker aan het doelobject en geen verificatie uitvoert. Dit komt overeen met het aanvragen van anonieme binding in LDAP en geeft aan dat alle gebruikers zijn opgenomen in de beveiligingscontext.

Als de verificatievlagmen zijn ingesteld op nul, voert ADSI een eenvoudige binding uit die als tekst zonder opmaak wordt verzonden.

Voorzichtigheid

Als een gebruikersnaam en wachtwoord worden opgegeven zonder verificatievlagmen op te geven, worden de gebruikersnaam en het wachtwoord via het netwerk verzonden in tekst zonder opmaak, wat een beveiligingsrisico is. Geef geen gebruikersnaam en wachtwoord op zonder verificatievlagmen op te geven.

Voorbeelden

In het volgende Visual Basic-codevoorbeeld ziet u hoe u de methode IADsOpenDSObject::OpenDSObject gebruikt.

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

In het volgende C++-codevoorbeeld ziet u hoe u de functie ADsOpenObject kunt gebruiken.

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()
}

De IADsOpenDSObject interface kan ook worden gebruikt in C++, maar het dupliceert de ADsOpenObject functie.

In het volgende C++-codevoorbeeld ziet u hoe u de IADsOpenDSObject interface gebruikt om dezelfde bindingsbewerking uit te voeren als in het bovenstaande codevoorbeeld.

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();
}

Zie ook

ADS_AUTHENTICATION_ENUM voorbeelden

IADsOpenDSObject

ADsOpenObject