如何在 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";
}
我想为我的 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";
}