Bindung mit ADsOpenObject und IADsOpenDSObject::OpenDSObject
Die ADsOpenObject-Funktion und die IADsOpenDSObject::OpenDSObject-Methode werden verwendet, um an Verzeichnisdienstobjekte zu binden, wenn alternative Anmeldeinformationen angegeben werden müssen und wenn eine Datenverschlüsselung erforderlich ist.
Die Anmeldeinformationen des aufrufenden Threads sollten nach Möglichkeit verwendet werden. Wenn jedoch alternative Anmeldeinformationen verwendet werden müssen, muss 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:
- Derselbe Benutzername in jedem Bindungsvorgang.
- Implementieren Sie bei jedem Bindungsvorgang eine serverlose Bindung oder eine 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 Authentifizierungsoptionen zu ermöglichen. Der Hauptvorteil der Verwendung dieser Schnittstellen besteht darin, verschiedene Arten der Authentifizierung für Active Directory-Clients bereitzustellen und die Sitzung zu verschlüsseln. Derzeit lässt ADSI die Übergabe von Zertifikaten nicht zu. Daher können Sie SSL für die Verschlüsselung und dann Kerberos, NTLM oder 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 unter Windows ist das Protokoll Kerberos. Das Nicht zulassen eines Zertifikats für die Authentifizierung ist im Fall einer Webseite akzeptabel, da die Authentifizierung vor dem Ausführen der Webseite erfolgt.
Open-Vorgänge ermöglichen es Ihnen zwar, einen Benutzer und ein Kennwort anzugeben, aber sie sollten dies nicht tun. Geben Sie stattdessen keine Anmeldeinformationen an, und verwenden Sie implizit die Anmeldeinformationen des Sicherheitskontexts des Aufrufers. Wenn Sie eine Bindung an ein Verzeichnisobjekt mithilfe der Anmeldeinformationen des Aufrufers mit ADsOpenObject oder IADsOpenDSObject::OpenDSObject herstellen möchten, geben Sie NULL
sowohl den Benutzernamen als auch das Kennwort an.
Um eine Bindung ohne Authentifizierung zu erstellen, verwenden Sie schließlich das Flag ADS_NO_AUTHENTICATION . Keine Authentifizierung gibt an, dass ADSI versucht, als anonymer Benutzer an das Zielobjekt zu binden, und führt keine Authentifizierung durch. Dies entspricht dem Anfordern einer anonymen Bindung in LDAP und gibt an, dass alle Benutzer im Sicherheitskontext enthalten sind.
Wenn die Authentifizierungsflags auf 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 der Benutzername und das Kennwort im 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.
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)
Im folgenden C++-Codebeispiel wird die Verwendung der Funktion ADsOpenObject 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, sie dupliziert jedoch die Funktion ADsOpenObject .
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();
}