Bagikan melalui


Metode IADsOpenDSObject::OpenDSObject (iads.h)

Metode IADsOpenDSObject::OpenDSObject mengikat objek ADSI, menggunakan kredensial yang diberikan, dan mengambil penunjuk IDispatch ke objek yang ditentukan.

Penting Tidak disarankan agar Anda menggunakan metode ini dengan Penyedia WinNT. Untuk informasi selengkapnya, silakan lihat artikel KB 218497, Masalah Autentikasi Pengguna dengan Penyedia WinNT Antarmuka Layanan Direktori Aktif.
 

Sintaks

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

Parameter

[in] lpszDNName

String Unicode yang dihentikan null yang menentukan ADsPath dari objek ADSI. Untuk informasi selengkapnya dan contoh string pengikatan untuk parameter ini, lihat LDAP ADsPath. Saat menggunakan penyedia LDAP dengan ADsPath yang menyertakan nama server tertentu, parameter lnReserved harus menyertakan bendera ADS_SERVER_BIND .

[in] lpszUserName

String Unicode yang dihentikan null yang menentukan nama pengguna yang akan digunakan untuk mengamankan izin dari server namespace. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

[in] lpszPassword

String Unicode yang dihentikan null yang menentukan kata sandi yang akan digunakan untuk mendapatkan izin dari server namespace layanan.

[in] lnReserved

Bendera autentikasi yang digunakan untuk menentukan opsi pengikatan. Untuk informasi selengkapnya, lihat ADS_AUTHENTICATION_ENUM.

[out] ppOleDsObj

Arahkan ke penunjuk ke antarmuka IDispatch pada objek yang diminta.

Nilai kembali

Metode ini mendukung nilai pengembalian standar, termasuk S_OK ketika antarmuka IDispatch telah berhasil diambil menggunakan kredensial ini.

Untuk informasi selengkapnya, lihat Kode Kesalahan ADSI.

Keterangan

Metode ini tidak boleh digunakan hanya untuk memvalidasi kredensial pengguna.

Ketika lnReserved diatur, perilaku OpenDSObject bergantung pada penyedia yang terhubung dengannya. Namespace keamanan tinggi dapat mengabaikan bendera ini dan selalu memerlukan autentikasi.

Metode IADsOpenDSObject::OpenDSObject mempertahankan kredensial pengguna yang diautentikasi dan dienkripsi dalam cache. Kredensial yang di-cache dapat digunakan dalam operasi berikutnya untuk mengikat ke objek direktori lainnya. Aplikasi klien ADSI tidak boleh menyimpan kredensial yang disediakan oleh pengguna. Sebaliknya, mereka harus mengandalkan infrastruktur ADSI untuk melakukan penembolokan. Untuk menggunakan kredensial cache, lpszPassword dan lpszUserName harus tetap tidak berubah dalam panggilan OpenDSObject berikutnya. Contoh kode berikut menunjukkan operasi ini.

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

Kredensial yang diteruskan ke fungsi IADsOpenDSObject::OpenDSObject hanya digunakan dengan objek tertentu yang terikat dan tidak memengaruhi konteks keamanan utas panggilan. Ini berarti bahwa, dalam contoh kode berikut, panggilan ke IADsOpenDSObject::OpenDSObject akan menggunakan kredensial yang berbeda dari panggilan ke 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")

Dengan pengikatan tanpa server, nama server, "server1", tidak dinyatakan secara eksplisit. Server default digunakan sebagai gantinya. Hanya penyedia LDAP yang mendukung pengikatan tanpa server. Untuk menggunakan fitur ini, komputer klien harus berada di domain Direktori Aktif. Untuk mencoba pengikatan tanpa server dari komputer, Anda harus mengikat sebagai pengguna domain.

Agar penembolokan kredensial berfungsi dengan baik, penting untuk menjaga referensi objek tetap luar biasa untuk mempertahankan handel cache. Dalam contoh yang diberikan di atas, upaya untuk membuka "obj2" setelah merilis "obj1" akan mengakibatkan kegagalan autentikasi.

Metode IADsOpenDSObject menggunakan kredensial default saat lpszUserName dan lpszPassword diatur ke NULL.

Jika autentikasi Kerberos diperlukan agar berhasil menyelesaikan permintaan direktori tertentu menggunakan penyedia LDAP, string pengikatan lpszDNName harus menggunakan ADsPath tanpa server, seperti "LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com", atau harus menggunakan ADsPath dengan nama server DNS yang sepenuhnya memenuhi syarat, seperti "LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith, CN=admin,DC=Fabrikam,DC=com". Pengikatan ke server menggunakan nama NETBIOS datar atau nama DNS pendek, misalnya, menggunakan nama pendek "central3" alih-alih "central3.corp.Fabrikam.com", mungkin atau mungkin tidak menghasilkan autentikasi Kerberos.

Fungsi pembantu ADsOpenObject menawarkan fitur yang sama dengan metode IADsOpenDSObject::OpenDSObject .

Dengan penyedia LDAP untuk Direktori Aktif, Anda dapat meneruskan lpszUserName sebagai salah satu string berikut:

  • Nama akun pengguna, seperti "jeffsmith". Untuk menggunakan nama pengguna dengan sendirinya, Anda hanya harus mengatur bendera ADS_SECURE_AUTHENTICATION di parameter lnReserved .
  • Jalur pengguna dari versi Windows sebelumnya, seperti "Fabrikam\jeffsmith".
  • Nama Terhormat, seperti "CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com". Untuk menggunakan DN, parameter lnReserved harus nol atau harus menyertakan bendera ADS_USE_SSL
  • Nama Prinsipal Pengguna (UPN), seperti "jeffsmith@Fabrikam.com". Untuk menggunakan UPN, Anda harus menetapkan nilai UPN yang sesuai untuk atribut userPrincipalName dari objek pengguna target.

Contoh

Contoh kode berikut menunjukkan cara menggunakan IADsOpenDSObject untuk membuka objek pengguna "Administrator" pada "Fabrikam" dengan Autentikasi Aman melalui penyedia 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

Contoh kode berikut menggunakan IADsOpenDSObject untuk membuka objek Direktori Aktif melalui penyedia 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();
        }
    }
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista
Server minimum yang didukung Windows Server 2008
Target Platform Windows
Header iads.h
DLL Activeds.dll

Lihat juga

Kode Kesalahan ADSI

ADS_AUTHENTICATION_ENUM

ADsOpenObject

Pengikatan

GetObject

IADSOpenDSObject

IDispatch

LDAP ADsPath

WNetAddConnetion2