Metode IADsOpenDSObject::OpenDSObject (iads.h)
Metode IADsOpenDSObject::OpenDSObject mengikat objek ADSI, menggunakan kredensial yang diberikan, dan mengambil penunjuk IDispatch ke objek yang ditentukan.
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 |