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

问题描述:

我想写LDAP身份验证我的代码Perl script.Below我提供了示例USER详细信息和AD服务器详细信息。 我无法使用下面提供的变量来验证LDAP用户。 我使用的Net :: LDAP库,但我仍然无法实现我的目标。 我需要帮助来了解LDAP身份验证过程以及我需要暗示的身份验证LDAP用户的逻辑。如何在Perl中执行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:[email protected]"; 
#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: 

请帮助......

+2

也请你展示如何应用的Net :: LDAP和解释,当您尝试验证发生了什么。有些事情一定在发生。没有看到你做了什么,就不可能进行调试。 – simbabque

+0

这里是我用来执行LDAP身份验证的代码 $ ldap = Net :: LDAP-> new($ HOST,port => $ PORT)或者“无法连接到LDAP服务器:$ @”; if($ ldap-> bind($ USER,password => $ PWD)){ #成功认证 \t \t print“Successful Authentication \ n”; } \t else { \t \t print“Unsuccessful Authentication \ n”; \t \t push(@downlist,$ server); \t \t - $ upcount; \t} $ ldap-> unbind(); –

+0

请[编辑]你的问题。这不是论坛,评论不代表代码。这是不可读的。 – simbabque

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

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

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"; 
} 
+0

非常感谢。这解决了这个问题。这是正确的分辨率 –

+0

耶!我很有帮助! :-D –