# HG changeset patch # User wizard # Date 1269352525 -10800 # Node ID 739f1288ca842a4611a0ca17efbf266b4a6e9823 # Parent 9f5795a10939570629a17197a79f80eb94463f95 Auth in progress diff -r 9f5795a10939 -r 739f1288ca84 Lib/IMPL/Security/Auth.pm --- a/Lib/IMPL/Security/Auth.pm Fri Mar 19 20:06:12 2010 +0300 +++ b/Lib/IMPL/Security/Auth.pm Tue Mar 23 16:55:25 2010 +0300 @@ -28,21 +28,11 @@ =head1 DESCRIPTION -Базовыйы модуль для авторизации пользователей. - -Процесс авторизации состоит зи следующих шагов +Базовыйы объект для авторизации. -1. Клиент отправляет на сервер запрос для авторизации с начальными параметрами. -2. Сервер получает запрос, находит данные аутентификации для клиента, -производит аутентификацию -3. Модуль аутентификации возвращает результат, на основе которого -либо формируется контекст безопасности, либо продолжается процесс аутентификации +В процессе авторизации клиент и сервер обмениеваются данными безопасности C<$challenge>. -Полученный контекст безопасности содержит объект для доступа к сессии аутентификации, -в которм содержится уникальные свойства сессии, например идентификатор, сеансовые ключи -и т.д. - -Пакет аутентификации должен иметь следующий интерфейс +При этом =over diff -r 9f5795a10939 -r 739f1288ca84 Lib/IMPL/Security/Auth/Simple.pm --- a/Lib/IMPL/Security/Auth/Simple.pm Fri Mar 19 20:06:12 2010 +0300 +++ b/Lib/IMPL/Security/Auth/Simple.pm Tue Mar 23 16:55:25 2010 +0300 @@ -2,7 +2,6 @@ use base qw(IMPL::Security::Auth); use Digest::MD5; -import IMPL::Security::Auth qw(:Const GenSSID); use IMPL::Class::Property; @@ -21,7 +20,7 @@ my ($this,$challenge) = @_; if (Digest::MD5::md5_hex($challenge) eq $this->_passwordImage) { - return (SUCCESS,$this->_sessionCookie(GenSSID)); + return (SUCCESS,$this->_sessionCookie($this->GenSSID)); } elsee { return (FAIL,undef); } diff -r 9f5795a10939 -r 739f1288ca84 Lib/IMPL/Security/Context.pm --- a/Lib/IMPL/Security/Context.pm Fri Mar 19 20:06:12 2010 +0300 +++ b/Lib/IMPL/Security/Context.pm Tue Mar 23 16:55:25 2010 +0300 @@ -12,9 +12,9 @@ my $nobody; BEGIN { - public property Principal => prop_get; - public property AssignedRoles => prop_all | prop_list; - public property AuthSession => prop_all; + public property principal => prop_get; + public property rolesAssigned => prop_all | prop_list; + public property auth => prop_all; } sub Impersonate { @@ -36,7 +36,7 @@ sub contextNobody { my ($self) = @_; - $nobody = $self->new(Principal => IMPL::Security::Principal->nobody, AssignedRoles => undef) unless $nobody; + $nobody = $self->new(principal => IMPL::Security::Principal->nobody, rolesAssigned => undef) unless $nobody; $nobody; } diff -r 9f5795a10939 -r 739f1288ca84 Lib/IMPL/Web/QueryHandler/AuthCookie.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Web/QueryHandler/AuthCookie.pm Tue Mar 23 16:55:25 2010 +0300 @@ -0,0 +1,37 @@ +package IMPL::Web::QueryHandler::AuthCookie; + +use base qw(IMPL::Web::QueryHandler); +use Digest::MD5 qw(md5_hex); + +use IMPL::Class::Property; + +BEGIN { + public property salt => prop_all; +} + +sub Process { + my ($this,$action,$nextHandler) = @_; + + my $method = $action->query->cookie('method') || 'simple'; + + if ($method eq 'simple') { + + if ($action->query->cookie('sign') eq md5_hex( + $this->salt, + $action->query->cookie('sid'), + $this->salt + ) ) { + + my $context = $action->application->security->Session($action->query->cookie('sid')); + + $context->auth-> + + } + + } else { + die new IMPL::Exception("Unknown auth method",$method); + } +} + + +1; \ No newline at end of file