| Authen-Simple-LDAP documentation | Contained in the Authen-Simple-LDAP distribution. |
Authen::Simple::ActiveDirectory - Simple ActiveDirectory authentication
use Authen::Simple::ActiveDirectory;
my $ad = Authen::Simple::ActiveDirectory->new(
host => 'ad.company.com',
principal => 'company.com'
);
if ( $ad->authenticate( $username, $password ) ) {
# successfull authentication
}
# or as a mod_perl Authen handler
PerlModule Authen::Simple::Apache
PerlModule Authen::Simple::ActiveDirectory
PerlSetVar AuthenSimpleActiveDirectory_host "ad.company.com"
PerlSetVar AuthenSimpleActiveDirectory_principal "company.com"
<Location /protected>
PerlAuthenHandler Authen::Simple::ActiveDirectory
AuthType Basic
AuthName "Protected Area"
Require valid-user
</Location>
Authenticate against Active Directory.
This implementation differs from Authen::Simple::LDAP in way that it will try to bind directly as the users principial.
This method takes a hash of parameters. The following options are valid:
Connection host, can be a hostname, IP number or a URI. Defaults to localhost.
host => ldap.company.com
host => 10.0.0.1
host => ldap://ldap.company.com:389
host => ldaps://ldap.company.com
Connection port, default to 389. May be overriden by host if host is a URI.
port => 389
Connection timeout, defaults to 60.
timeout => 60
The suffix in users principal, usally the domain or forrest. Required.
principal => 'company.com'
Any object that supports debug, info, error and warn.
log => Log::Log4perl->get_logger('Authen::Simple::ActiveDirectory')
Returns true on success and false on failure.
Christian Hansen ch@ngmedia.com
This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.
| Authen-Simple-LDAP documentation | Contained in the Authen-Simple-LDAP distribution. |
package Authen::Simple::ActiveDirectory; use strict; use warnings; use base 'Authen::Simple::Adapter'; use Net::LDAP qw[]; use Net::LDAP::Constant qw[LDAP_INVALID_CREDENTIALS]; use Params::Validate qw[]; our $VERSION = 0.2; __PACKAGE__->options({ host => { type => Params::Validate::SCALAR | Params::Validate::ARRAYREF, default => 'localhost', optional => 1 }, port => { type => Params::Validate::SCALAR, default => 389, optional => 1 }, timeout => { type => Params::Validate::SCALAR, default => 60, optional => 1 }, principal => { type => Params::Validate::SCALAR, optional => 0 } }); sub check { my ( $self, $username, $password ) = @_; my $connection = Net::LDAP->new( $self->host, Port => $self->port, Timeout => $self->timeout ); unless ( defined $connection ) { my $host = $self->host; $self->log->error( qq/Failed to connect to '$host'. Reason: '$@'/ ) if $self->log; return 0; } my $user = sprintf( '%s@%s', $username, $self->principal ); my $message = $connection->bind( $user, password => $password ); if ( $message->is_error ) { my $error = $message->error; my $level = $message->code == LDAP_INVALID_CREDENTIALS ? 'debug' : 'error'; $self->log->$level( qq/Failed to authenticate user '$user'. Reason: '$error'/ ) if $self->log; return 0; } $self->log->debug( qq/Successfully authenticated user '$user'./ ) if $self->log; return 1; } 1; __END__