如何在 Perl 中执行 LDAP 身份验证

How to Perform LDAP authentication in Perl

我想为我的 Perl 编写 LDAP 身份验证 代码 script.Below 我已经提供了示例用户详细信息和 AD 服务器细节。 我无法使用下面提供的变量对 LDAP 用户进行身份验证。 我正在使用 Net::LDAP 库,但我仍然无法实现我的 objective。 我需要帮助来理解 LDAP 身份验证过程以及我需要隐含的逻辑来对 LDAP 用户进行身份验证。

我有一个疑问是 "do i need to verify whether the LDAP user exist or not in the AD server or not?"

USER:cn=Feroz,dc=Alam,dc=com 
PWD:nike 
HOST:10.10.10.10 
PORT:1234
AD_USER:CN=Feroz,OU=Service,OU=Accounts,DC=Alam,DC=com
AD_PWD:addidas
AD_SERVER:myadserver.com
$ldap = Net::LDAP->new($HOST, port=>$PORT) or die "Cant Connect to LDAP server:$@";
#IF I REMOVE THE PORT NO i AM GETTING THE ERROR "Cant Connect to LDAP server:IO::Socket::INET: connect:"
if ( $ldap->bind($USER,password=>$PWD) ) {
    print "Successful Authentication\n";
    #IT IS GIVING ME SUCCESSFUL AUTHENTICATION MESSAGE EVEN IF ENTER THE WRONG PASSWORD
}
else{
    print "Unsuccessful Authentication\n";
    push(@downlist, $server);
    --$upcount;
}
$ldap->unbind();

DEBUG LOGS:
Net::LDAP=HASH(0x488268) sending:
Net::LDAP=HASH(0x488268) received:
0000   12: SEQUENCE {
0002    1:   INTEGER = 1
0005    7:   [APPLICATION 1] {
0007    1:     ENUM = 49
000A    0:     STRING = ''
000C    0:     STRING = ''
000E     :   }
000E     : }
Successful Authentication
Net::LDAP=HASH(0x488268) sending:

请帮忙......

Net::LDAP returns 一个消息对象在使用绑定方法时除非有代码错误(在那种情况下我不知道,它可能 return undef 或 0或呱呱声)。 无论如何,这意味着无论身份验证是否成功,您的条件将始终为真。

我认为你需要存储绑定的结果并测试它的代码,就像这样:

my $mesg = $ldap->bind($USER,password=>$PWD);

if ( $mesg and $mesg->code() == 0 ) {
    print "Successful Authentication\n";
}
else{
    print "Unsuccessful Authentication\n";
    print 'Received error '.$mesg->code().': '$mesg->error()."\n";
}