Authentication ldap\u绑定使用错误的凭据返回ldap\u成功

Authentication ldap\u绑定使用错误的凭据返回ldap\u成功,authentication,ldap,Authentication,Ldap,我有个小问题。我想根据LDAP(Windows Active Directory)对用户进行身份验证,一切正常,但组合(良好的用户、良好的密码、错误的域) 在线标记!!!这里!!!'我希望返回0x31或任何其他错误。相反,我获得了成功:( 有什么建议吗?Thx,Milan您是否正在检查ldap_init()、ldap_set_option()和ldap_connect()的返回值 我会尝试使用SEC\u WINNT\u AUTH\u IDENTITY\u EX结构并填写版本和长度 否则,您的代码

我有个小问题。我想根据LDAP(Windows Active Directory)对用户进行身份验证,一切正常,但组合(良好的用户、良好的密码、错误的域)

在线标记!!!这里!!!'我希望返回0x31或任何其他错误。相反,我获得了成功:(


有什么建议吗?Thx,Milan

您是否正在检查ldap_init()、ldap_set_option()和ldap_connect()的返回值

我会尝试使用
SEC\u WINNT\u AUTH\u IDENTITY\u EX
结构并填写版本和长度

否则,您的代码在我看来是正确的

它也可能会退回到匿名访问,或以您的登录用户身份访问

Windows在匹配域和用户名字符串方面非常“有帮助”。你给域传递了什么?它是一个看似合理但不存在的域字符串吗?如果它违反了命名规则,它可以被忽略,用户可以像你没有指定用户名一样匹配。特别是像“管理员”这样的知名用户名最终只匹配任何本地计算机或域

您是否尝试过使用绑定连接进行简单查询


有一种奇怪的情况,即使用最近过期的密码绑定会成功,但随后会导致同一连接上的后续绑定的某些操作任意失败。不过,我不认为这是您看到的情况。如果您遇到这种奇怪的情况,我想解决方案就隐藏在这里的某个地方:

绑定成功be因为在ldap_init调用期间,这对用户名/密码对所连接的域有效。在这种情况下,凭证中提供的域将被忽略

若要确认此状态,您可以尝试使用此服务器的受信任域中的某些凭据。由于用户在您连接的域中不存在,因此提供无效的域名将导致绑定失败,并且凭据无效


希望这能有所帮助。

嗨,我将尝试该结构的“EX”版本。关于返回值,我一定会检查它们。这只是一个简短的测试用例。总之,thx,rezna
LDAP* ldap = ldap_init(L"myserver", 389);
ULONG ldap_version = 3;

ULONG ret = LDAP_SUCCESS;

ret = ldap_set_option(ldap, LDAP_OPT_PROTOCOL_VERSION, (void*)&ldap_version);
ret = ldap_connect(ldap, NULL);

SEC_WINNT_AUTH_IDENTITY ai;
ai.Domain = (unsigned short*)BAD_DOMAIN;
ai.DomainLength = wcslen(BAD_DOMAIN);
ai.User = (unsigned short*)OK_USER;
ai.UserLength = wcslen(OK_USER);
ai.Password = (unsigned short*)OK_PASS;
ai.PasswordLength = wcslen(OK_PASS);
ai.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;

ret = ldap_bind_s(ldap, NULL, (PWCHAR) &ai, LDAP_AUTH_NTLM); // !!! HERE !!!
ret = ldap_unbind_s(ldap);