Уведомления

Группа в Telegram: @pythonsu

#1 Июль 19, 2009 21:55:09

bigramx
От:
Зарегистрирован: 2009-07-19
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Кастомная авторизация на Django.

Доброго времени суток!

Подскажите как решить следующую проблему:
На домене http://www.abcd.ru/ есть авторизационный субдомен http://auth.abcd.ru/, которые авторизует пользователя по логину и паролю и выдаёт ему куки на весь домен .abcd.ru. По запросу к авторизационному серверу с логином и паролем по обычному POST протоколу он проверяет авторизацию и выдаёт результат в виде xml.

На субдомене http://test.abcd.ru/ разрабатывается django приложение. Подскажите как можно сделать (или где почитать) про реализацию в django такого механизма:
При каждой загрузке страницы проверяются куки, выбирается из кукисов сессия юзера. Если сессия указана в кукисах, то отправляется запрос на авторизационный сервер http://auth.abcd.ru/. По возвращаемому xml определяется валиодность авторизации юзера и в зависимости от этого он считается авторизованным или не авторизованным.

Заранее благодарю за помощь.



Офлайн

#2 Июль 20, 2009 00:13:00

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Кастомная авторизация на Django.

bigramx
По запросу к авторизационному серверу с логином и паролем по обычному POST протоколу он проверяет авторизацию и выдаёт результат в виде xml.
Надо понимать, что ещё и по куке?
bigramx
Подскажите как можно сделать (или где почитать) про реализацию в django такого механизма:
Cделать обычную middleware примерно такого вида:

def parse_response(response):
# тут парсится xml и определяется статут
pass

def call_auth_server(cookie):
from urllib2 import urlopen

# Либо просто прокидывать куку, прикидываясь клиентом.
# Зависит от реализации.
response = urlopen('http://auth.abcd.ru/', data={'cookie': cookie})

return parse_response(response.read())

class AuthMiddleware(object):
def process_request(self, request):
cookie = request.COOKIES.get('my_session_cookie')
if cookie:
request.user_authenticated = call_auth_server(cookie)
else:
request.user_authenticated = False



Офлайн

#3 Июль 20, 2009 06:53:02

bigramx
От:
Зарегистрирован: 2009-07-19
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Кастомная авторизация на Django.

Daevaorn
Надо понимать, что ещё и по куке?
Нет, зачем? Куки висят одни на весь домен. В куках только id юзера и id сессии. Ничего криминального вроде нет. Просто в POST запросе отправлять два параметра user_id и sess_id как обычные POST данные. Авторизационный сервер сам проверяет полученные данные и смотрит, получал ли юзер с таким ID сессию с таким ID. Если да, то возвращает инфу о юзере в xml, если нет, то возвращает в этом же xml ошибку.

Может я чего не додумал и в этом методе есть потенциальные косяки, которые потом могут вылезти боком? Другого метода единой авторизации для домена и всех субдоменов я не смог придумать…

Daevaorn
Cделать обычную middleware примерно такого вида:
Спасибо, вот эта штука реально очень помогла продвинуться в решении задачи. Почти всё сделал! ))



Офлайн

#4 Июль 20, 2009 12:13:45

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Кастомная авторизация на Django.

bigramx
Нет, зачем? Куки висят одни на весь домен. В куках только id юзера и id сессии. Ничего криминального вроде нет. Просто в POST запросе отправлять два параметра user_id и sess_id как обычные POST данные. Авторизационный сервер сам проверяет полученные данные и смотрит, получал ли юзер с таким ID сессию с таким ID. Если да, то возвращает инфу о юзере в xml, если нет, то возвращает в этом же xml ошибку.
Ну так значит всё-таки по куке?:-) В исходном сообщении вы сказали что это сервер проверяет авторизованность по логину и паролю, и было бы странно при каждом запросе их спрашивать у пользователя. Следовательно авторизационный сервер может проверять залогиненность и по куке. Что вы собственно в этом абзаце и подтвердили.



Офлайн

#5 Июль 20, 2009 13:47:33

bigramx
От:
Зарегистрирован: 2009-07-19
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Кастомная авторизация на Django.

Daevaorn
Ну так значит всё-таки по куке? :-) В исходном сообщении вы сказали что это сервер проверяет авторизованность по логину и паролю, и было бы странно при каждом запросе их спрашивать у пользователя. Следовательно авторизационный сервер может проверять залогиненность и по куке. Что вы собственно в этом абзаце и подтвердили.
А, ну да, сорри, не так Вас понял просто. ))) Кстати, всё уже заработало, огромное спасибо за помощь! В скором времени уже смогу показать для чего мне это было нужно. ))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version