Método IADsOpenDSObject::OpenDSObject (iads.h)
El método IADsOpenDSObject::OpenDSObject enlaza a un objeto ADSI, utilizando las credenciales especificadas y recupera un puntero IDispatch al objeto especificado.
Sintaxis
HRESULT OpenDSObject(
[in] BSTR lpszDNName,
[in] BSTR lpszUserName,
[in] BSTR lpszPassword,
[in] long lnReserved,
[out] IDispatch **ppOleDsObj
);
Parámetros
[in] lpszDNName
Cadena Unicode terminada en null que especifica ADsPath del objeto ADSI. Para obtener más información y ejemplos de cadenas de enlace para este parámetro, consulte LDAP ADsPath. Cuando se usa el proveedor LDAP con un ADsPath que incluye un nombre de servidor específico, el parámetro lnReserved debe incluir la marca ADS_SERVER_BIND.
[in] lpszUserName
Cadena Unicode terminada en null que especifica el nombre de usuario que se va a usar para proteger el permiso del servidor de espacio de nombres. Para obtener más información, vea la siguiente sección Comentarios.
[in] lpszPassword
Cadena Unicode terminada en null que especifica la contraseña que se va a usar para obtener el permiso del servidor de espacio de nombres.
[in] lnReserved
Marcas de autenticación usadas para definir las opciones de enlace. Para obtener más información, vea ADS_AUTHENTICATION_ENUM.
[out] ppOleDsObj
Puntero a un puntero a un
Valor devuelto
Este método admite los valores devueltos estándar, incluidos los S_OK cuando la interfaz IDispatch se ha recuperado correctamente mediante estas credenciales.
Para obtener más información, consulta códigos de error adsi.
Observaciones
Este método no se debe usar solo para validar las credenciales de usuario.
Cuando se establece lnReserved, el comportamiento de openDSObject depende del proveedor al que se conecta. Los espacios de nombres de alta seguridad pueden omitir estas marcas y siempre requieren autenticación.
El método IADsOpenDSObject::OpenDSObject mantiene las credenciales de usuario autenticadas y cifradas en la memoria caché. Las credenciales almacenadas en caché se pueden usar en operaciones posteriores para enlazar a cualquier otro objeto de directorio. Las aplicaciones cliente ADSI no deben almacenar en caché las credenciales proporcionadas por el usuario. En su lugar, deben confiar en la infraestructura adsi para realizar el almacenamiento en caché. Para usar las credenciales almacenadas en caché, lpszPassword y lpszUserName deben permanecer sin cambios en las llamadas posteriores de OpenDSObject. En el ejemplo de código siguiente se muestra esta operación.
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
Las credenciales pasadas a la función IADsOpenDSObject::OpenDSObject solo se usan con el objeto determinado enlazado a y no afectan al contexto de seguridad del subproceso que realiza la llamada. Esto significa que, en el ejemplo de código siguiente, la llamada a IADsOpenDSObject::OpenDSObject usará credenciales diferentes que la llamada a 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")
Con un enlace sin servidor, el nombre del servidor, "server1", no se indica explícitamente. En su lugar, se usa el servidor predeterminado. Solo el proveedor LDAP admite el enlace sin servidor. Para usar esta característica, el equipo cliente debe estar en un dominio de Active Directory. Para intentar un enlace sin servidor desde un equipo, debe enlazar como usuario de dominio.
Para que el almacenamiento en caché de credenciales funcione correctamente, es importante mantener pendiente una referencia de objeto para mantener el identificador de caché. En el ejemplo anterior, un intento de abrir "obj2" después de liberar "obj1" producirá un error de autenticación.
El método
Si se requiere la autenticación Kerberos para la finalización correcta de una solicitud de directorio específica mediante el proveedor LDAP, el lpszDNName cadena de enlace debe usar un ADsPath sin servidor, como "LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com", o debe usar un ADsPath con un nombre de servidor DNS completo, como "LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith, CN=admin,DC=Fabrikam,DC=com". El enlace al servidor mediante un nombre NETBIOS plano o un nombre DNS corto, por ejemplo, con el nombre corto "central3" en lugar de "central3.corp.Fabrikam.com", puede producir o no autenticación Kerberos.
La función auxiliar ADsOpenObject ofrece las mismas características que el método IADsOpenDSObject::OpenDSObject.
Con el proveedor LDAP para Active Directory, puede pasar lpszUserName como una de las siguientes cadenas:
- Nombre de una cuenta de usuario, como "jeffsmith". Para usar un nombre de usuario por sí mismo, solo debe establecer la marca ADS_SECURE_AUTHENTICATION en el parámetro lnReserved.
- Ruta de acceso del usuario de una versión anterior de Windows, como "Fabrikam\jeffsmith".
- Nombre distintivo, como "CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com". Para usar un DN, el parámetro lnReserved debe ser cero o debe incluir la marca ADS_USE_SSL
- Nombre principal de usuario (UPN), como "jeffsmith@Fabrikam.com". Para usar un UPN, debe asignar el valor DE UPN adecuado para el atributo userPrincipalName de
del objeto de usuario de destino.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar IADsOpenDSObject para abrir el objeto de usuario "Administrador" en "Fabrikam" con autenticación segura a través del proveedor 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
En el ejemplo de código siguiente se usa IADsOpenDSObject para abrir un objeto de Active Directory a través del proveedor 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();
}
}
}
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows Vista |
servidor mínimo admitido | Windows Server 2008 |
de la plataforma de destino de |
Windows |
encabezado de |
iads.h |
DLL de |
Activeds.dll |
Consulte también
códigos de error ADSI