Condividi tramite


Metodo IADsOpenDSObject::OpenDSObject (iads.h)

Il metodo IADsOpenDSObject::OpenDSObject viene associato a un oggetto ADSI, usando le credenziali specificate e recupera un puntatore IDispatch all'oggetto specificato.

Importante Non è consigliabile usare questo metodo con il provider WinNT. Per altre informazioni, vedere l'articolo della Knowledge Base 218497 Problemi di autenticazione utente con il provider WinNT delle interfacce del servizio Active Directory.
 

Sintassi

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

Parametri

[in] lpszDNName

Stringa Unicode con terminazione Null che specifica ADsPath dell'oggetto ADSI. Per altre informazioni ed esempi di stringhe di associazione per questo parametro, vedere LDAP ADsPath. Quando si usa il provider LDAP con un ADsPath che include un nome di server specifico, il parametro lnReserved deve includere il flag ADS_SERVER_BIND .

[in] lpszUserName

Stringa Unicode con terminazione Null che specifica il nome utente da usare per proteggere l'autorizzazione dal server dello spazio dei nomi. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

[in] lpszPassword

Stringa Unicode con terminazione Null che specifica la password da usare per ottenere l'autorizzazione dal server dello spazio dei nomi.

[in] lnReserved

Flag di autenticazione usati per definire le opzioni di associazione. Per altre informazioni, vedere ADS_AUTHENTICATION_ENUM.

[out] ppOleDsObj

Puntatore a un puntatore a un'interfaccia IDispatch nell'oggetto richiesto.

Valore restituito

Questo metodo supporta i valori restituiti standard, incluso S_OK quando l'interfaccia IDispatch è stata recuperata correttamente usando queste credenziali.

Per altre informazioni, vedere Codici di errore ADSI.

Commenti

Questo metodo non deve essere usato solo per convalidare le credenziali utente.

Quando lnReserved è impostato, il comportamento di OpenDSObject dipende dal provider a cui si connette. Gli spazi dei nomi con sicurezza elevata possono ignorare questi flag e richiedere sempre l'autenticazione.

Il metodo IADsOpenDSObject::OpenDSObject gestisce le credenziali utente autenticate e crittografate nella cache. Le credenziali memorizzate nella cache possono essere usate nelle operazioni successive per l'associazione a qualsiasi altro oggetto directory. Le applicazioni client ADSI non devono memorizzare nella cache le credenziali fornite dall'utente. Devono invece basarsi sull'infrastruttura ADSI per eseguire la memorizzazione nella cache. Per usare le credenziali memorizzate nella cache, lpszPassword e lpszUserName devono rimanere invariate in tutte le chiamate successive di OpenDSObject. Nell'esempio di codice seguente viene illustrata questa operazione.

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

Le credenziali passate alla funzione IADsOpenDSObject::OpenDSObject vengono usate solo con l'oggetto specifico associato a e non influiscono sul contesto di sicurezza del thread chiamante. Ciò significa che, nell'esempio di codice seguente, la chiamata a IADsOpenDSObject::OpenDSObject userà credenziali diverse rispetto alla chiamata 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'associazione serverless, il nome del server "server1" non è indicato in modo esplicito. Viene invece usato il server predefinito. Solo il provider LDAP supporta l'associazione serverless. Per usare questa funzionalità, il computer client deve trovarsi in un dominio di Active Directory. Per tentare un'associazione serverless da un computer, è necessario eseguire l'associazione come utente di dominio.

Per il corretto funzionamento della memorizzazione nella cache delle credenziali, è importante mantenere un riferimento a un oggetto in attesa per mantenere l'handle della cache. Nell'esempio precedente, un tentativo di aprire "obj2" dopo il rilascio di "obj1" genererà un errore di autenticazione.

Il metodo IADsOpenDSObject usa le credenziali predefinite quando lpszUserName e lpszPassword sono impostati su NULL.

Se l'autenticazione Kerberos è necessaria per il completamento di una richiesta di directory specifica tramite il provider LDAP, la stringa di associazione lpszDNName deve usare un ADsPath serverless, ad esempio "LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com", oppure deve usare un ADsPath con un nome completo del server DNS, ad esempio "LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith, CN=admin,DC=Fabrikam,DC=com". L'associazione al server tramite un nome NETBIOS flat o un nome DNS breve, ad esempio, usando il nome breve "central3" anziché "central3.corp.Fabrikam.com", potrebbe o meno restituire l'autenticazione Kerberos.

La funzione helper ADsOpenObject offre le stesse funzionalità del metodo IADsOpenDSObject::OpenDSObject .

Con il provider LDAP per Active Directory, è possibile passare lpszUserName come una delle stringhe seguenti:

  • Nome di un account utente, ad esempio "jeffsmith". Per usare un nome utente da solo, è necessario impostare solo il flag ADS_SECURE_AUTHENTICATION nel parametro lnReserved .
  • Percorso utente da una versione precedente di Windows, ad esempio "Fabrikam\jeffsmith".
  • Nome distinto, ad esempio "CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com". Per usare un DN, il parametro lnReserved deve essere zero oppure deve includere il flag ADS_USE_SSL
  • Nome entità utente (UPN), ad esempio "jeffsmith@Fabrikam.com". Per usare un UPN, è necessario assegnare il valore UPN appropriato per l'attributo userPrincipalName dell'oggetto utente di destinazione.

Esempio

Nell'esempio di codice seguente viene illustrato come usare IADsOpenDSObject per aprire l'oggetto utente "Administrator" in "Fabrikam" con l'autenticazione sicura tramite il provider 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

Nell'esempio di codice seguente viene utilizzato IADsOpenDSObject per aprire un oggetto Active Directory tramite il provider 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();
        }
    }
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione iads.h
DLL Activeds.dll

Vedi anche

Codici di errore ADSI

ADS_AUTHENTICATION_ENUM

ADsOpenObject

Binding

Getobject

IADsOpenDSObject

Idispatch

LDAP ADsPath

WNetAddConnetion2