如何在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:
请帮助......
答
的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 –
也请你展示如何应用的Net :: LDAP和解释,当您尝试验证发生了什么。有些事情一定在发生。没有看到你做了什么,就不可能进行调试。 – simbabque
这里是我用来执行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(); –
请[编辑]你的问题。这不是论坛,评论不代表代码。这是不可读的。 – simbabque