Liaison avec ADsOpenObject et IADsOpenDSObject::OpenDSObject
La fonction ADsOpenObject et la méthode IADsOpenDSObject::OpenDSObject sont utilisées pour lier des objets de service d’annuaire lorsque d’autres informations d’identification doivent être spécifiées et lorsque le chiffrement des données est requis.
Les informations d’identification du thread appelant doivent être utilisées lorsque cela est possible. Toutefois, si d’autres informations d’identification doivent être utilisées, la fonction ADsOpenObject ou la méthode IADsOpenDSObject::OpenDSObject doit être utilisée. Si d’autres informations d’identification sont utilisées, il est important de ne pas mettre en cache le mot de passe. Plusieurs opérations de liaison peuvent être effectuées en spécifiant le nom d’utilisateur et le mot de passe de la première opération de liaison, puis en spécifiant uniquement le nom d’utilisateur dans les liaisons suivantes. Le système configure une session sur le premier appel et utilise la même session sur les appels de liaison suivants tant que les conditions suivantes sont remplies :
- Le même nom d’utilisateur dans chaque opération de liaison.
- Implémentez une liaison serverless ou une liaison au même serveur dans chaque opération de liaison.
- Maintenez une session ouverte en maintenant sur une référence d’objet à partir de l’une des opérations de liaison. La session est fermée lorsque la dernière référence d’objet est publiée.
ADsOpenObject et IADsOpenDSObject::OpenDSObject utilisent les interfaces SSPI (Security Support Provider Interfaces) de Windows NT pour permettre une flexibilité dans les options d’authentification. Le principal avantage de l’utilisation de ces interfaces est de fournir différents types d’authentification aux clients Active Directory et de chiffrer la session. Actuellement, ADSI n’autorise pas la transmission de certificats. Par conséquent, vous pouvez utiliser SSL pour le chiffrement, puis Kerberos, NTLM ou l’authentification simple, en fonction de la façon dont les indicateurs sont définis sur le paramètre dwReserved .
Vous ne pouvez pas demander un fournisseur SSPI spécifique dans ADSI, bien que vous obteniez toujours le protocole de préférence le plus élevé. Dans le cas d’une liaison de client Windows à un ordinateur exécutant Windows, le protocole est Kerberos. Ne pas autoriser un certificat pour l’authentification est acceptable dans le cas d’une page web, car l’authentification se produit avant l’exécution de la page web.
Bien que les opérations d’ouverture vous permettent de spécifier un utilisateur et un mot de passe, vous ne devez pas le faire. Au lieu de cela, ne spécifiez pas d’informations d’identification et utilisez implicitement les informations d’identification du contexte de sécurité de l’appelant. Pour établir une liaison à un objet d’annuaire à l’aide des informations d’identification de l’appelant avec ADsOpenObject ou IADsOpenDSObject::OpenDSObject, spécifiez NULL
à la fois le nom d’utilisateur et le mot de passe.
Enfin, pour établir une liaison sans authentification, utilisez l’indicateur ADS_NO_AUTHENTICATION . Aucune authentification indique qu’ADSI tente de se lier en tant qu’utilisateur anonyme à l’objet cible et n’effectue aucune authentification. Cela équivaut à demander une liaison anonyme dans LDAP et indique que tous les utilisateurs sont inclus dans le contexte de sécurité.
Si les indicateurs d’authentification sont définis sur zéro, ADSI effectue une liaison simple, envoyée en texte clair.
Attention
Si un nom d’utilisateur et un mot de passe sont spécifiés sans spécifier d’indicateurs d’authentification, le nom d’utilisateur et le mot de passe sont transmis sur le réseau en texte clair, ce qui constitue un risque de sécurité. Ne spécifiez pas de nom d’utilisateur et de mot de passe sans spécifier d’indicateurs d’authentification.
Exemples
L’exemple de code Visual Basic suivant montre comment utiliser la méthode IADsOpenDSObject::OpenDSObject .
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)
L’exemple de code C++ suivant montre comment utiliser la fonction ADsOpenObject .
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()
}
L’interface IADsOpenDSObject peut également être utilisée en C++, mais elle duplique la fonction ADsOpenObject.
L’exemple de code C++ suivant montre comment utiliser l’interface IADsOpenDSObject pour effectuer la même opération de liaison que dans l’exemple de code ci-dessus.
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();
}