Share via


IADsOpenDSObject ::OpenDSObject, méthode (iads.h)

La méthode IADsOpenDSObject ::OpenDSObject se lie à un objet ADSI à l’aide des informations d’identification données et récupère un pointeur IDispatch vers l’objet spécifié.

Important Il n’est pas recommandé d’utiliser cette méthode avec le fournisseur WinNT. Pour plus d’informations, consultez l’article de la base de connaissances 218497, Problèmes d’authentification utilisateur avec le fournisseur WinNT des interfaces de service Active Directory.
 

Syntaxe

HRESULT OpenDSObject(
  [in]  BSTR      lpszDNName,
  [in]  BSTR      lpszUserName,
  [in]  BSTR      lpszPassword,
  [in]  long      lnReserved,
  [out] IDispatch **ppOleDsObj
);

Paramètres

[in] lpszDNName

Chaîne Unicode terminée par null qui spécifie l’ADsPath de l’objet ADSI. Pour plus d’informations et des exemples de chaînes de liaison pour ce paramètre, consultez LDAP ADsPath. Lorsque vous utilisez le fournisseur LDAP avec un ADsPath qui inclut un nom de serveur spécifique, le paramètre lnReserved doit inclure l’indicateur ADS_SERVER_BIND .

[in] lpszUserName

Chaîne Unicode terminée par null qui spécifie le nom d’utilisateur à utiliser pour sécuriser l’autorisation à partir du serveur d’espaces de noms. Pour plus d'informations, consultez la section Notes qui suit.

[in] lpszPassword

Chaîne Unicode terminée par null qui spécifie le mot de passe à utiliser pour obtenir l’autorisation auprès du serveur d’espaces de noms.

[in] lnReserved

Indicateurs d’authentification utilisés pour définir les options de liaison. Pour plus d’informations, consultez ADS_AUTHENTICATION_ENUM.

[out] ppOleDsObj

Pointeur vers un pointeur vers une interface IDispatch sur l’objet demandé.

Valeur retournée

Cette méthode prend en charge les valeurs de retour standard, notamment S_OK lorsque l’interface IDispatch a été récupérée avec succès à l’aide de ces informations d’identification.

Pour plus d’informations, consultez Codes d’erreur ADSI.

Remarques

Cette méthode ne doit pas être utilisée uniquement pour valider les informations d’identification de l’utilisateur.

Lorsque lnReserved est défini, le comportement d’OpenDSObject dépend du fournisseur auquel il se connecte. Les espaces de noms à haute sécurité peuvent ignorer ces indicateurs et exiger toujours une authentification.

La méthode IADsOpenDSObject ::OpenDSObject conserve les informations d’identification utilisateur authentifiées et chiffrées dans le cache. Les informations d’identification mises en cache peuvent être utilisées dans les opérations suivantes pour la liaison à d’autres objets d’annuaire. Les applications clientes ADSI ne doivent pas mettre en cache les informations d’identification fournies par l’utilisateur. Au lieu de cela, ils doivent s’appuyer sur l’infrastructure ADSI pour effectuer la mise en cache. Pour utiliser les informations d’identification mises en cache, lpszPassword et lpszUserName doivent rester inchangés dans les appels suivants d’OpenDSObject. L’exemple de code suivant montre cette opération.

Dim dso As IADsOpenDSObject
Dim obj1, obj2 As IADs
Dim szUsername As String
Dim szPassword As String

Set dso = GetObject("LDAP:")

' Insert code securely.

' Supply full credentials to initiate a server connection.
Set obj1 = dso.OpenDSObject( _
    "LDAP://server1/CN=Dept1,DC=Fabrikam,DC=com", _
    szUsername, _
    szPassword, _
    ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)

' Perform an operation with the bound object, obj1
MsgBox obj1.Class

' Bind to another object with the cached user credential.
Set obj2 = dso.OpenDSObject( _
    "LDAP://server1/CN=Dept2,DC=Fabrikam,DC=com", _
    szUsername, _
    szPassword, _
    ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)

MsgBox obj2.Class

Les informations d’identification transmises à la fonction IADsOpenDSObject ::OpenDSObject sont utilisées uniquement avec l’objet particulier lié à et n’affectent pas le contexte de sécurité du thread appelant. Cela signifie que, dans l’exemple de code suivant, l’appel à IADsOpenDSObject ::OpenDSObject utilise des informations d’identification différentes de celles de l’appel à GetObject.

Dim dso As IADsOpenDSObject
Dim obj1, obj2 As IADs
Dim szUsername As String
Dim szPassword As String

Set dso = GetObject("LDAP:")

' Insert code securely.

' Bind using full credentials.
Set obj1 = dso.OpenDSObject( _
    "LDAP://server1/CN=Dept1,DC=Fabrikam,DC=com", _
    szUsername, _
    szPassword, _
    ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)

' Bind to another object with the default credentials.
Set obj2 = GetObject("LDAP://server1/CN=Dept2,DC=Fabrikam,DC=com")

Avec une liaison serverless, le nom du serveur, « server1 », n’est pas indiqué explicitement. Le serveur par défaut est utilisé à la place. Seul le fournisseur LDAP prend en charge la liaison serverless. Pour utiliser cette fonctionnalité, l’ordinateur client doit se trouver sur un domaine Active Directory. Pour tenter une liaison serverless à partir d’un ordinateur, vous devez établir une liaison en tant qu’utilisateur de domaine.

Pour que la mise en cache des informations d’identification fonctionne correctement, il est important de conserver une référence d’objet en attente pour maintenir le handle de cache. Dans l’exemple donné ci-dessus, une tentative d’ouverture de « obj2 » après la publication de « obj1 » entraîne un échec d’authentification.

La méthode IADsOpenDSObject utilise les informations d’identification par défaut lorsque lpszUserName et lpszPassword ont la valeur NULL.

Si l’authentification Kerberos est requise pour la réussite d’une demande d’annuaire spécifique à l’aide du fournisseur LDAP, la chaîne de liaison lpszDNName doit utiliser un ADsPath serverless, tel que « LDAP ://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com », ou utiliser un ADsPath avec un nom de serveur DNS complet, tel que « LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith, CN=admin,DC=Fabrikam,DC=com ». La liaison au serveur à l’aide d’un nom NETBIOS plat ou d’un nom DNS court, par exemple, en utilisant le nom court « central3 » au lieu de « central3.corp.Fabrikam.com », peut ou non donner lieu à l’authentification Kerberos.

La fonction d’assistance ADsOpenObject offre les mêmes fonctionnalités que la méthode IADsOpenDSObject ::OpenDSObject .

Avec le fournisseur LDAP pour Active Directory, vous pouvez passer lpszUserName comme l’une des chaînes suivantes :

  • Nom d’un compte d’utilisateur, tel que « jeffsmith ». Pour utiliser un nom d’utilisateur seul, vous devez définir uniquement l’indicateur ADS_SECURE_AUTHENTICATION dans le paramètre lnReserved .
  • Chemin d’accès utilisateur d’une version précédente de Windows, telle que « Fabrikam\jeffsmith ».
  • Nom unique, tel que « CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com ». Pour utiliser un DN, le paramètre lnReserved doit être égal à zéro ou doit inclure l’indicateur ADS_USE_SSL
  • Nom d’utilisateur principal (UPN), tel que «jeffsmith@Fabrikam.com ». Pour utiliser un UPN, vous devez affecter la valeur UPN appropriée pour l’attribut userPrincipalName de l’objet utilisateur cible.

Exemples

L’exemple de code suivant montre comment utiliser IADsOpenDSObject pour ouvrir l’objet utilisateur « Administrateur » sur « Fabrikam » avec l’authentification sécurisée via le fournisseur LDAP.

Dim dso As IADsOpenDSObject
Dim domain As IADsDomain
Dim szUsername As String
Dim szPassword As String

On Error GoTo Cleanup

' Insert code to securely retrieve the user name and password.
 
Set dso = GetObject("LDAP:")
Set domain = dso.OpenDSObject("LDAP://Fabrikam", szUsername, _
                              szPassword, _
                              ADS_SECURE_AUTHENTICATION)

Cleanup:
    If (Err.Number <> 0 ) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set dso = Nothing
    Set domain = Nothing

L’exemple de code suivant utilise IADsOpenDSObject pour ouvrir un objet Active Directory via le fournisseur LDAP.

IADsOpenDSObject *pDSO = NULL;
HRESULT hr = S_OK;
 
hr = ADsGetObject(L"LDAP:", IID_IADsOpenDSObject, (void**) &pDSO);
if (SUCCEEDED(hr))
{
    IDispatch *pDisp;
    hr = pDSO->OpenDSObject(CComBSTR("LDAP://DC=Fabrikam, DC=com"), 
                       CComBSTR("jeffsmith@Fabrikam.com"),
                       CComBSTR("passwordhere"),
                       ADS_SECURE_AUTHENTICATION, 
                       &pDisp);
    pDSO->Release();
    if (SUCCEEDED(hr))
    {
        IADs *pADs;
        hr = pDisp->QueryInterface(IID_IADs, (void**) &pADs);
        pDisp->Release();
        if (SUCCEEDED(hr))
        {
        // Perform an object manipulation here.
            pADs->Release();
        }
    }
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
Serveur minimal pris en charge Windows Server 2008
Plateforme cible Windows
En-tête iads.h
DLL Activeds.dll

Voir aussi

Codes d’erreur ADSI

ADS_AUTHENTICATION_ENUM

ADsOpenObject

Binding

Getobject

IADsOpenDSObject

IDispatch

Chemin d’authentification LDAP

WNetAddConnetion2