如何在Perl中通过LDAP验证登录?

raz*_*z3r 1 perl login ldap

我写了一个绑定到LDAP服务器的小脚本,并检索所有用户和用户信息.现在我想写另一个绑定到LDAP服务器然后测试给定登录的那个.我怎样才能做到这一点?

my $ldap = ldapConnect();
my $user = 'user';
my $pwd = 'pwd';
# TEST USER AND PWD BUT HOW?

sub ldapConnect {
my $ldap = Net::LDAP->new('192.168.*.*');
my $password = '***';
$ldap->bind('cn=Administrator,cn=Users,DC=***,DC=***', password=> $password);
return $ldap;
}
Run Code Online (Sandbox Code Playgroud)

der*_*ert 6

而不是绑定为LDAP管理员,只需绑定为您要测试的用户.如果绑定成功,则登录测试正常.如果它失败了,它就不会.这样,您就不必担心重新实现LDAP服务器在Perl中执行的所有身份验证逻辑.

或者,正如David W.指出的那样,如果您需要为用户搜索DN(因为用户名不是DN),您可以先匿名绑定(如果LDAP服务器配置为接受)或者作为已知用户,搜索DN,然后重新绑定为您尝试检查其帐户的用户.我建议使用非特权用户进行初始搜索,但当然您的管理用户也会工作.


Ric*_*ões 6

my $ldap = ldapConnect();        # Connect
my $search = $ldap->search(      # Search for the user
    base   => 'DC=***,DC=***',
    scope  => 'sub',
    filter => "(&(uid=$user))",
    attrs  => ['dn']
);
die "not found" if not $search->count;

# Get the user's dn and try to bind:
my $user_dn = $search->entry->dn; 
$ldap->bind( $user_dn, password => $pass );
print +($ldap->error ? "Bad credentials" : "Success!"), "\n";
Run Code Online (Sandbox Code Playgroud)

  • 这是官方的答案.请参阅Net :: LDAP FAQ中的[如何针对LDAP服务器对用户进行身份验证?](http://www-archive.mozilla.org/directory/faq/perldap-faq.html#_ldap_10). (2认同)