Аутентификация приложения CGI с использованием нескольких драйверов - PullRequest
5 голосов
/ 25 июня 2010

Я пытался аутентифицировать свое приложение CGI с помощью 2 драйверов, один из которых использует имя пользователя / пароль, хранящиеся в базе данных, а другой - с помощью активного каталога ldap.

ниже приведен код

$self->authen->config( 
DRIVER => [ 'DBI',
  DBH         => $self->dbh,
  TABLE       => 'user',
  CONSTRAINTS => {
    'user.username'     => '__CREDENTIAL_1__',
    'MD5:user.password' => '__CREDENTIAL_2__'
  },
],

DRIVER => [ 'Authen::Simple::LDAP',
     host   => 'ldapad.company.com',
     basedn => 'OU=XXX,OU=XX,DC=XXX,DC=XXX', 
binddn => 'CN=usename,OU=Users,OU=XXX,OU=AD,DC=XXX,DC=xxx',
bindpw => 'secret',
filter => '(cn=%s)',   
],


CREDENTIALS    => [ 'authen_username', 'authen_password' ],
STORE                => 'Session',
LOGOUT_RUNMODE       => 'logout',
LOGIN_RUNMODE        => 'login',
POST_LOGIN_RUNMODE   => 'okay',
RENDER_LOGIN         => \&my_login_form,
);

Как заставить приложение проверить, что другой драйвер не аутентифицирован ни для одного.Прямо сейчас, как и ожидалось, драйвер, указанный внизу, работает, и они оба работают, в зависимости от того, который был назначен последним.

Ответы [ 2 ]

2 голосов
/ 07 июля 2010

Я предполагаю, что вы используете CGI::Application::Plugin::Authentication.Я думаю, что в вашем коде есть небольшая проблема, которая оправдывает тот факт, что работает только последний из двух.

Ваш код выглядит так:,Например, посмотрите на этот пример из дистрибутива C :: A :: P :: Authentication .

Будучи хешем, это означает, что последняя запись DRIVER будет перезаписанапредыдущие.Я считаю, что исправить это очень просто:

$self->authen->config( 
  DRIVER => [
       [ 'DBI', ... ],
       [ 'Authen::Simple::LDAP', ... ],
  ],
  CREDENTIALS => [ 'authen_username', 'authen_password' ],
  STORE  => 'Session',
  # ...
);

Пример этого можно найти в документации к модулю:

http://search.cpan.org/~silasmonk/CGI-Application-Plugin-Authentication/lib/CGI/Application/Plugin/Authentication.pm#config

0 голосов
/ 07 июля 2010

Как заставить приложение проверить, что другой драйвер не аутентифицирован с одним.

Мне кажется, что вы хотите проверить, работает ли более одного метода аутентификации, а не последний, который работает. Не могли бы вы установить 3 разных $ self-> authen-> config () и попробовать войти 3 раза? Вы используете хеш для отслеживания методов, которые работают.

...