IADsOpenDSObject::OpenDSObject 메서드(iads.h)
IADsOpenDSObject::OpenDSObject 메서드는 지정된 자격 증명을 사용하여 ADSI 개체에 바인딩하고 지정된 개체에 대한 IDispatch 포인터를 검색합니다.
통사론
HRESULT OpenDSObject(
[in] BSTR lpszDNName,
[in] BSTR lpszUserName,
[in] BSTR lpszPassword,
[in] long lnReserved,
[out] IDispatch **ppOleDsObj
);
매개 변수
[in] lpszDNName
ADSI 개체의 ADsPath를 지정하는 null로 끝나는 유니코드 문자열입니다. 이 매개 변수에 대한 바인딩 문자열에 대한 자세한 내용 및 예제는 LDAP ADsPath참조하세요. 특정 서버 이름을 포함하는 ADsPath와 함께 LDAP 공급자를 사용하는 경우 lnReserved 매개 변수에는 ADS_SERVER_BIND 플래그가 포함되어야 합니다.
[in] lpszUserName
네임스페이스 서버에서 사용 권한을 보호하는 데 사용할 사용자 이름을 지정하는 null로 끝나는 유니코드 문자열입니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
[in] lpszPassword
네임스페이스 서버에서 사용 권한을 얻는 데 사용할 암호를 지정하는 null로 끝나는 유니코드 문자열입니다.
[in] lnReserved
바인딩 옵션을 정의하는 데 사용되는 인증 플래그입니다. 자세한 내용은 ADS_AUTHENTICATION_ENUM참조하세요.
[out] ppOleDsObj
요청된 개체의 IDispatch 인터페이스에 대한 포인터를 가리키는 포인터입니다.
반환 값
이 메서드는 이러한 자격 증명을 사용하여 IDispatch 인터페이스를 성공적으로 검색한 경우 S_OK 포함하여 표준 반환 값을 지원합니다.
자세한 내용은 ADSI 오류 코드참조하세요.
발언
이 메서드는 사용자 자격 증명의 유효성을 검사하는 데만 사용하면 안 됩니다.
lnReserved 설정되면 OpenDSObject 동작은 연결된 공급자에 따라 달라집니다. 높은 보안 네임스페이스는 이러한 플래그를 무시하고 항상 인증이 필요할 수 있습니다.
IADsOpenDSObject::OpenDSObject 메서드는 캐시에서 인증되고 암호화된 사용자 자격 증명을 유지 관리합니다. 캐시된 자격 증명은 다른 디렉터리 개체에 바인딩하기 위해 후속 작업에서 사용할 수 있습니다. ADSI 클라이언트 애플리케이션은 사용자가 제공한 자격 증명을 캐시해서는 안 됩니다. 대신 캐싱을 수행하려면 ADSI 인프라를 사용해야 합니다. 캐시된 자격 증명을 사용하려면 lpszPassword 및 lpszUserNameOpenDSObject후속 호출에서 변경되지 않은 상태로 유지되어야 합니다. 다음 코드 예제에서는 이 작업을 보여줍니다.
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
IADsOpenDSObject::OpenDSObject 함수에 전달된 자격 증명은 바인딩된 특정 개체에만 사용되며 호출 스레드의 보안 컨텍스트에는 영향을 미치지 않습니다. 즉, 다음 코드 예제에서
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")
서버리스 바인딩의 경우 서버 이름 "server1"은 명시적으로 명시되지 않습니다. 대신 기본 서버가 사용됩니다. LDAP 공급자만 서버리스 바인딩을 지원합니다. 이 기능을 사용하려면 클라이언트 컴퓨터가 Active Directory 도메인에 있어야 합니다. 컴퓨터에서 서버리스 바인딩을 시도하려면 도메인 사용자로 바인딩해야 합니다.
자격 증명 캐싱이 제대로 작동하려면 캐시 핸들을 유지하려면 개체 참조를 미해결 상태로 유지하는 것이 중요합니다. 위에 제공된 예제에서 "obj1"을 해제한 후 "obj2"를 열려고 하면 인증 실패가 발생합니다.
LDAP 공급자를 사용하여 특정 디렉터리 요청을 성공적으로 완료하기 위해 Kerberos 인증이 필요한 경우 lpszDNName 바인딩 문자열은 "LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com"과 같은 서버리스 ADSPath를 사용하거나 정규화된 DNS 서버 이름(예: "LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith")이 있는 ADsPath를 사용해야 합니다. CN=admin,DC=Fabrikam,DC=com". 플랫 NETBIOS 이름 또는 짧은 DNS 이름을 사용하여 서버에 바인딩합니다. 예를 들어 "central3.corp.Fabrikam.com" 대신 짧은 이름 "central3"을 사용하면 Kerberos 인증이 생성되거나 생성되지 않을 수 있습니다.
ADsOpenObject 도우미 함수는 IADsOpenDSObject::OpenDSObject 메서드와 동일한 기능을 제공합니다.
Active Directory용 LDAP 공급자를 사용하면 lpszUserName 다음 문자열 중 하나로 전달할 수 있습니다.
- 사용자 계정의 이름(예: "jeffsmith")입니다. 사용자 이름 자체를 사용하려면 lnReserved 매개 변수에서 ADS_SECURE_AUTHENTICATION 플래그만 설정해야 합니다.
- 이전 버전의 Windows의 사용자 경로(예: "Fabrikam\jeffsmith")입니다.
- "CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com"과 같은 고유 이름입니다. DN을 사용하려면 lnReserved 매개 변수가 0이거나 ADS_USE_SSL 플래그를 포함해야 합니다.
- UPN(사용자 계정 이름)(예: "jeffsmith@Fabrikam.com") UPN을 사용하려면 대상 사용자 개체의 userPrincipalName 특성에 적절한 UPN 값을 할당해야 합니다.
예제
다음 코드 예제에서는 IADsOpenDSObject 사용하여 LDAP 공급자를 통해 보안 인증으로 "Fabrikam"에서 "Administrator" 사용자 개체를 여는 방법을 보여 줍니다.
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
다음 코드 예제에서는 IADsOpenDSObject 사용하여 LDAP 공급자를 통해 Active Directory 개체를 엽니다.
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();
}
}
}
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista |
지원되는 최소 서버 | Windows Server 2008 |
대상 플랫폼 | Windows |
헤더 | iads.h |
DLL | Activeds.dll |
참고 항목
ADSI 오류 코드
ADsOpenObject
GetObject
WNetAddConnetion2