51
|
1 package IMPL::Security::Auth;
|
230
|
2 use strict;
|
51
|
3
|
52
|
4 use Digest::MD5 qw(md5_hex);
|
|
5
|
51
|
6 use constant {
|
194
|
7 AUTH_SUCCESS => 1,
|
|
8 AUTH_INCOMPLETE => 2,
|
|
9 AUTH_FAIL => 3
|
51
|
10 };
|
|
11
|
166
|
12 use parent qw(Exporter);
|
51
|
13
|
52
|
14 our @EXPORT_OK = qw(&AUTH_SUCCESS &AUTH_INCOMPLETE &AUTH_FAIL &GenSSID);
|
|
15 our %EXPORT_TAGS = (Const => [qw(&AUTH_SUCCESS &AUTH_INCOMPLETE &AUTH_FAIL)]);
|
|
16
|
|
17 {
|
|
18 my $i = 0;
|
230
|
19 sub GenSSID {
|
52
|
20 return md5_hex(time,rand,$i++);
|
|
21 }
|
|
22 }
|
51
|
23
|
69
|
24 sub DoAuth {
|
194
|
25 die new IMPL::NotImplementedException;
|
69
|
26 }
|
|
27
|
73
|
28 sub isTrusted {
|
194
|
29 0;
|
73
|
30 }
|
|
31
|
87
|
32 sub Create {
|
194
|
33 my ($self,%args) = @_;
|
|
34
|
|
35 return $self->new($self->CreateSecData(%args));
|
87
|
36 }
|
|
37
|
51
|
38 1;
|
|
39
|
|
40 __END__
|
|
41
|
|
42 =pod
|
|
43
|
71
|
44 =head1 NAME
|
51
|
45
|
230
|
46 C<IMPL::Security::Auth> Базовыйы класс для объектов аутентификации.
|
71
|
47
|
|
48 =head1 DESCRIPTION
|
51
|
49
|
81
|
50 C<[Abstract]>
|
|
51
|
230
|
52 Объект аутентификации служет для аутентификации клиента, в случае успеха
|
|
53 образуется сессия идентифицирующая клиента, которая представлена на стороне
|
|
54 сервера объектом аутентификации.
|
|
55
|
|
56 Аутентификация носит итеративный характер, объект аутентификации сохраняет
|
|
57 состояние между итерациями.
|
51
|
58
|
180
|
59 Результатом аутентификации является сессия, состояние этой сессии также хранит объект
|
|
60 аутентификации.
|
70
|
61
|
180
|
62 В процессе авторизации клиент и сервер обмениеваются данными безопасности C<$challenge>.
|
|
63 И результатом каждой итерации является либо упех (C<AUTH_SUCCESS>), либо запрос на продолжение
|
|
64 (C<AUTH_INCOMPLETE>), либо неудача (C<AUTH_FAIL>). Количество итераций может быть разным,
|
|
65 зависит от пакета аутентификации.
|
52
|
66
|
71
|
67 =head1 EXPORT
|
|
68
|
|
69 =over
|
|
70
|
|
71 =item C<:Const>
|
|
72
|
180
|
73 Константы результата аутентификации
|
71
|
74
|
|
75 =over
|
|
76
|
|
77 =item C<AUTH_SUCCESS>
|
|
78
|
180
|
79 Успешная аутентификация
|
71
|
80
|
|
81 =item C<AUTH_INCOMPLETE>
|
|
82
|
180
|
83 Требуются дополнительные шаги
|
71
|
84
|
72
|
85 =item C<AUTH_FAIL>
|
71
|
86
|
180
|
87 Аутентификация неуспешна.
|
71
|
88
|
|
89 =back
|
|
90
|
|
91 =back
|
|
92
|
|
93 =head1 MEMBERS
|
|
94
|
52
|
95 =over
|
|
96
|
|
97 =item C<CTOR($SecData)>
|
|
98
|
180
|
99 Создает пакет для авторизации на основе данных безопасности для пользователя.
|
|
100 C<$SecData> - Зависит от пакета аутентификации.
|
71
|
101
|
73
|
102 =item C<[get] isTrusted>
|
|
103
|
230
|
104 Флаг того, что аутентификация закончена успешно и сессия создана. Данный объект
|
|
105 может быть создан для аутентификации сессии.
|
73
|
106
|
81
|
107 =item C<DoAuth($challenge)>
|
52
|
108
|
230
|
109 Производит аутентификацию пользователя, возвращает результат
|
|
110 аутентификации, в виде массива ($status,$challenge).
|
71
|
111
|
230
|
112 Даже после успешной аутентификации полученные данные C<$challenge> должны быть
|
|
113 отправлены клиенту для завершения аутентификации на стороне клиента.
|
71
|
114
|
|
115 =item C<[static] CreateSecData(%args)>
|
52
|
116
|
230
|
117 Создает данные безопасности, на основе параметров. Параметры зависят от пакета
|
327
|
118 аутентификации. Возвращает строку с данными безопасности.
|
52
|
119
|
87
|
120 =item C<[static] Create(%args)>
|
|
121
|
230
|
122 Создает объект аутентификации, на основе параметров. Параметры зависят от
|
|
123 пакета аутентификации. Внутри вызывает метод C<CreateSecData(%args)>.
|
87
|
124
|
71
|
125 =item C<[static] SecDataArgs()>
|
|
126
|
230
|
127 Возвращает хеш с описанием параметров для функции C<CreateSecData>.
|
|
128 Ключами являются имена параметров, значениями - типы.
|
73
|
129
|
|
130 =back
|
52
|
131
|
180
|
132 =cut
|