2010-06-25 16 views
5

Tôi đã cố xác thực ứng dụng CGI của mình thông qua 2 trình điều khiển, một trình điều khiển sử dụng tên người dùng/mật khẩu được lưu trữ trong cơ sở dữ liệu và thư mục hoạt động ldap khác.Xác thực ứng dụng CGI sử dụng nhiều trình điều khiển

Sau đây là mã

$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, 
); 

Làm thế nào để làm cho các ứng dụng kiểm tra các tài xế khác không được chứng thực với một. Ngay bây giờ, như mong đợi, tài xế của nó được liệt kê ở phía dưới hoạt động và cả hai đều làm, tùy thuộc vào đó được giao cuối cùng.

Trả lời

2

Tôi giả sử bạn đang sử dụng CGI::Application::Plugin::Authentication. Tôi nghĩ rằng có một vấn đề nhỏ trong mã của bạn, điều đó chứng minh rằng thực tế chỉ có phần cuối của hai tác phẩm.

Mã của bạn cũng giống như:

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

nhưng $self->authen->config() mất một băm. Ví dụ: hãy xem phân phối this example from the C::A::P::Authentication.

Là một hàm băm, điều đó có nghĩa là mục nhập DRIVER cuối cùng sẽ ghi đè các mục trước đó. Tôi tin rằng việc sửa chữa rất đơn giản:

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

Bạn có thể tìm thấy một ví dụ về điều này trong các tài liệu mô-đun:

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

0

Làm thế nào để làm cho các ứng dụng kiểm tra các tài xế khác không được xác thực bằng một.

Có vẻ như tôi muốn kiểm tra xem nhiều phương thức xác thực có hoạt động không, thay vì phương thức xác thực cuối cùng hoạt động. Bạn có thể thiết lập 3 $ tự-> authen-> config khác() và thử đăng nhập 3 lần khác nhau không? Bạn sử dụng hàm băm để theo dõi các phương thức hoạt động.

Các vấn đề liên quan