저는 Active Directory 서버에 연결하고 내용을 검색 한 다음 해당 내용을 터미널로 덤프하는 C++ 프로그램을 작성하고 있습니다. 내 문제는 성공적으로 인증하고 연결할 수있는 유일한 방법은 사용자의 표시 이름 (예 : 테스트 사용자)을 사용하는 것입니다. 대신 사용자의 로그온 이름을 사용하도록이 인증 방법을 변경하고 싶습니다. 여기 표시 이름 대신 사용자 로그온 이름을 사용하여 Active Directory로 인증
(예 : [email protected])
세션 설정을 담당하는 코드입니다char * _hostName = "The_Computer_Name";
char * _dn = "CN=Test User,DC=EXAMPLE,DC=COM";
char * _ps = "The_Password123";
int ldap_Query::session_init(){
if (_pLdapConnection != nullptr) return 0;
_pLdapConnection = ldap_init(_hostName, LDAP_PORT);
if (_pLdapConnection == nullptr) {
int err = ldap_get_option(_pLdapConnection, LDAP_OPT_ERROR_NUMBER, &err);
throw LdapQueryException(ldap_err2string(err));
}
unsigned long lRtn = ldap_simple_bind_s(_pLdapConnection, _dn,_ps);
if (lRtn != LDAP_SUCCESS) {
ldap_unbind(_pLdapConnection);
_pLdapConnection = nullptr;
throw LdapQueryException(ldap_err2string(lRtn));
}
return 0;
}
을 나는 사용자 - 교장 - 이름이라고 무엇을 찾고 있어요 생각하지만, 이를 사용하여 인증하는 예는 보지 못했습니다. 나는 "CN = tuser, DC = EXAMPLE, DC = COM"으로 _dn을 대체하려고 시도했지만 그와 관련하여 운이 없었습니다.
도움 주셔서 감사합니다.
제공된 "userprincipalname"속성을 사용하여 서비스 계정 또는 익명으로 (허용 된 경우) 사용자를 검색해야합니다. " 그렇다면 관리자 계정으로 인증하고 인증을 시도하거나 인증 정보없이 먼저 연결을 시도한 다음 해당 필터로 검색을 수행해야합니까? 사용자 인증을 시도하는 대신 이러한 자격 증명을 사용하여 레코드를 검색 할 수도 있습니다. – Josh
예, 검색 할 수 있도록 디렉토리에 바인딩해야합니다. 일부 디렉토리는 익명 바인드를 허용하도록 구성되며 익명 바인드에 속성의 서브 세트를 리턴 할 수 있습니다. Active Directory에서는 일반적이지 않습니다. 일반적으로 사용자를 찾을 수 있도록 검색 할 수있는 서비스 계정으로 바인딩해야합니다. 이 작업을 수행하기 위해 사용자의 자격 증명을 사용하여 catch 22에 있습니다. 바인드를 수행 할 DN이 필요하지만 바인드 할 때까지 DN을 가져올 수 없습니다. 일반적으로 응용 프로그램은 디렉토리 서버에 대한 연결을 통해 사용자를 검색합니다. –
더 많은 Windows 중심 툴링을 사용하면 upn, DOMAIN \ username과 직접 바인드 할 수 있지만 그 시점에서 LDAP의 유연성을 약간 포기해야합니다. –