IADsOpenDSObject ::OpenDSObject, méthode (iads.h)
La méthode
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’espace de noms. Pour plus d’informations, consultez la section Remarques suivante.
[in] lpszPassword
Chaîne Unicode terminée par null qui spécifie le mot de passe à utiliser pour obtenir l’autorisation du serveur d’espace 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 de retour
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 de OpenDSObject dépend du fournisseur auquel il se connecte. Les espaces de noms à haute sécurité peuvent ignorer ces indicateurs et toujours exiger l’authentification.
La méthode IADsOpenDSObject ::OpenDSObject gère 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 de 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 que 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 effectuer 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 ci-dessus, une tentative d’ouverture de « obj2 » après avoir libéré « obj1 » entraîne un échec d’authentification.
La méthode
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 il doit 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". 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 ne pas générer d’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 lui-même, 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, tel que « Fabrikam\jeffsmith ».
- Nom unique, tel que « CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com ». Pour utiliser un nom de domaine, le paramètre lnReserved doit être égal à zéro ou inclure l’indicateur de 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 « Administrator » 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();
}
}
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows Vista |
serveur minimum pris en charge | Windows Server 2008 |
plateforme cible | Windows |
d’en-tête | iads.h |
DLL | Activeds.dll |