Mercurial > pub > Impl
changeset 68:739f1288ca84
Auth in progress
author | wizard |
---|---|
date | Tue, 23 Mar 2010 16:55:25 +0300 |
parents | 9f5795a10939 |
children | 8c7b88bdb663 |
files | Lib/IMPL/Security/Auth.pm Lib/IMPL/Security/Auth/Simple.pm Lib/IMPL/Security/Context.pm Lib/IMPL/Web/QueryHandler/AuthCookie.pm |
diffstat | 4 files changed, 45 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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); }
--- 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; }
--- /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