При разработке практически любого более менее серьезного приложения для web всегда стоит задача аутентификации/авторизации пользователей вашего приложения. В большинстве случаев программист реализует свой собственный механизм доступа взаимодействуя c базой данных или используют базовую авторизацию с помощью web-сервера. Но если вы разрабатываете приложение для работы в сети Windows, которая как правило, в организациях более 10-15 компьютеров строится на Active Directory, то есть смысл использовать уже готовую базу данных для авторизации и аутентификации. Этой базой является каталог ActiveDirectory, который работает по стандартному протоколу LDAP.
Я думаю вы и до этого видели множество продуктов интегрирующихся с AD в плане разграничения доступа. В этой статье я дам простейший пример того как вам интегрировать ваш скрипт с AD для контроля доступа (авторизации) к вашему приложению.
Итак, как я уже сказал - ActiveDirectory поддерживает стандартный протокол LPAD, а соответственно для взаимодействия с базой AD мы можем использовать стандартный модуль Perl (хотя он вроде не входит в стандартную поставку, но доступен на CPAN под разные платформы) Net::LDAP.
В интернете есть масса примеров по работе с данным модулем, но возможно нет самого простого примера - авторизация в AD. Хотя это очевидно следует из примеров которые вы обнаружите в сети, в некоторых случаях эта очевидность не так очевидна :)).
Итак - основной метод модуля Net::LDAP, который нам потребуется -> bind.
Напишем простую функцию для проверки подлинности пользователя в AD:
...
7 sub auth_AD {
8 my ($user, $pass) = @_;
9 my $ad = Net::LDAP->new("domain.ru") or die "Could not connect! $!";
10 my $mesg = $ad->bind("$user\@domain.ru", password=>$pass, version => 3 );
11 return $mesg->is_error();
12 }
...
Функция принимает два аргумента, и возвращает цифровой статус ошибки (0 - в случае успеха и положительные числа в случае ошибки).
Так же полезной информацией может быть применение следующих вызовов:
$mesg->error(); # краткое описание выполнения операции: (ex. Success)
$mesg->error_text(); # расширенное описание операции (ex. Operation completed without error)
Можете возвращать эти вывозы из функций или записывать их для дальнейшего использования.
Простейший алгоритм авторизации:
1. Запрос данных для AD
2. В случае успеха открываем сессию/ставим cookie, etc.
Успехов!



Комментировать