如何在Perl中进行LDAP认证



我想为我的Perl脚本编写LDAP认证代码。下面我提供了示例USER详细信息和AD服务器详细信息。我无法使用下面提供的变量对LDAP用户进行身份验证。我正在使用Net::LDAP库,但我仍然无法实现我的目标。我需要帮助来理解LDAP身份验证过程和验证LDAP用户所需的逻辑。

我有一个疑问是"我是否需要验证LDAP用户是否存在于AD服务器中?"

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 Authenticationn";
    #IT IS GIVING ME SUCCESSFUL AUTHENTICATION MESSAGE EVEN IF ENTER THE WRONG PASSWORD
}
else{
    print "Unsuccessful Authenticationn";
    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在使用bind方法时返回一个消息对象,除非有代码错误(在这种情况下我不知道,它可能返回undef 0或croak)。无论如何,这意味着,无论身份验证是否成功,您的条件将始终为真。

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

my $mesg = $ldap->bind($USER,password=>$PWD);
if ( $mesg and $mesg->code() == 0 ) {
    print "Successful Authenticationn";
}
else{
    print "Unsuccessful Authenticationn";
    print 'Received error '.$mesg->code().': '$mesg->error()."n";
}

最新更新