Re: Асинхронная авторизация
Deomid Ryabkov
myself на rojer.pp.ru
Сб Янв 16 11:09:01 MSK 2010
Vladimir Romanov wrote:
> Кука выдается сразу пользователю чтобы понять когда он придет повторно
> с того-же устройства. Один и тот-же пользователь может приходить с
> разных компьютеров и различать их просто по имени пользователя не
> получится.
>
а зачем? к вам приходит юзер без валидной авторизационной куки,
но с логином и паролем. какая вам разница, с какого он устройства?
вы идёте в аутентификатор, проверяете юзер/пароль и либо выдаёте ему
кук и редирект, либо отправляете далеко. при этом надо различать
состояния "лдап перегружен, приходи позже" и "лдап сказал, что пароль
неправильный".
ну тут уж как удобнее, на второй случай можно предусмотреть 403,
а на первый давать отлупы 401.
аутентификатор, естественно, должен быть выполнен в виде бэкенда.
а вот валидность авторизационной куки можно проверить встроенным:
посчитать и сличить дайджест, проверить что-нибудь простенькое типа
expiration
(поле внутри тикета, защищённое дайджестом - в таком важном деле как
экспайр авторизации
полагаться на одну только честность и порядочность юзер-агента нельзя).
> Не хочется отсылать LDAP запрос из NGINX, т.к. он может выполняться не
> быстро и это оприведет к задержкам в обработке других запросов. Также
> есть идея, что если лимита хватает то проверять ранее выданные куки. А
> это уж точно надо делать отдельным процессом.
> LDAPов у меня несколько и надо еще понимать в какой из них лезть (по
> IP) и лимит считать отдельно для каждого. Еще периодически надо
> пречитывать таблицу с LDAPами и обновлять внутренние структуры.
>
> 2010/1/16 Deomid Ryabkov <myself at rojer.pp.ru>:
>
>> Vladimir Romanov wrote:
>>
>>> Добрый день!
>>>
>>> Работаю я тут над одним проектом. И етсь там задача авторизации
>>> пользователей, причем достаточно хитрая. Пользователи могут приходить
>>> из разных регионов. В каждом регионе свой LDAP. При этом есть
>>> ограничение - нельза слать больше чем N запросов в секнуду на каждый
>>> LDAP. В качестве клиента будет выступать приложение на компьютере
>>> пользователя. Как я хочу сделать сейчас.. При запроме пользователя
>>> выдавать ему куку
>>>
>> зачем?
>>
>>> и возвращать ему 401, а информацию заносить в базу.
>>>
>>>
>> опять же - зачем?
>>
>>> Отдельный процесс будет выбирать записи из базы, и посылать запросы в
>>> нужный LDAP c указанной скоростью. При последующих запросах
>>> пользователя уже можно будет пропустить.
>>> Есть ли более правильные способы?
>>>
>>>
>> имхо, просто сделать авторизационный процесс, который делает авторизацию
>> с нужным рейт-лимитом, а всё что свыше лимита - посылает нафиг.
>> куку пользователю выдавать только после успешной авторизации,
>> в результате со временем все пользователи будут окучены (то есть обзаведутся
>> куками :)
>> и перестанут трогать лдап. щастье наступает при условии что пропускной
>> способности лдапа
>> таки хватает на окучивание пользователей/реавторизацию (если для кук
>> предусмотрено ограниченное время жизни).
>> держать очередь запросов, считаю, совершенно нет нужды - пусть клиенты
>> проявляют настойчивость,
>> тем более что они, как я понял, железные, а не сидят и не тычут в кнопку
>> "login".
>>
>> --
>> Deomid "rojer" Ryabkov
>> myself at rojer.pp.ru
>> rojer at sysadmins.ru
>> ICQ: 8025844
>>
>>
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru at nginx.org
>> http://nginx.org/mailman/listinfo/nginx-ru
>>
>>
>>
>
>
>
>
--
Deomid "rojer" Ryabkov
myself at rojer.pp.ru
rojer at sysadmins.ru
ICQ: 8025844
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3308 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20100116/a256221a/attachment-0001.bin>
Подробная информация о списке рассылки nginx-ru