Форум сайта python.su
Доброго времени суток!
Подскажите как решить следующую проблему:
На домене http://www.abcd.ru/ есть авторизационный субдомен http://auth.abcd.ru/, которые авторизует пользователя по логину и паролю и выдаёт ему куки на весь домен .abcd.ru. По запросу к авторизационному серверу с логином и паролем по обычному POST протоколу он проверяет авторизацию и выдаёт результат в виде xml.
На субдомене http://test.abcd.ru/ разрабатывается django приложение. Подскажите как можно сделать (или где почитать) про реализацию в django такого механизма:
При каждой загрузке страницы проверяются куки, выбирается из кукисов сессия юзера. Если сессия указана в кукисах, то отправляется запрос на авторизационный сервер http://auth.abcd.ru/. По возвращаемому xml определяется валиодность авторизации юзера и в зависимости от этого он считается авторизованным или не авторизованным.
Заранее благодарю за помощь.
Офлайн
bigramxНадо понимать, что ещё и по куке?
По запросу к авторизационному серверу с логином и паролем по обычному POST протоколу он проверяет авторизацию и выдаёт результат в виде xml.
bigramxCделать обычную middleware примерно такого вида:
Подскажите как можно сделать (или где почитать) про реализацию в django такого механизма:
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
Офлайн
DaevaornНет, зачем? Куки висят одни на весь домен. В куках только id юзера и id сессии. Ничего криминального вроде нет. Просто в POST запросе отправлять два параметра user_id и sess_id как обычные POST данные. Авторизационный сервер сам проверяет полученные данные и смотрит, получал ли юзер с таким ID сессию с таким ID. Если да, то возвращает инфу о юзере в xml, если нет, то возвращает в этом же xml ошибку.
Надо понимать, что ещё и по куке?
DaevaornСпасибо, вот эта штука реально очень помогла продвинуться в решении задачи. Почти всё сделал! ))
Cделать обычную middleware примерно такого вида:
Офлайн
bigramxНу так значит всё-таки по куке?:-) В исходном сообщении вы сказали что это сервер проверяет авторизованность по логину и паролю, и было бы странно при каждом запросе их спрашивать у пользователя. Следовательно авторизационный сервер может проверять залогиненность и по куке. Что вы собственно в этом абзаце и подтвердили.
Нет, зачем? Куки висят одни на весь домен. В куках только id юзера и id сессии. Ничего криминального вроде нет. Просто в POST запросе отправлять два параметра user_id и sess_id как обычные POST данные. Авторизационный сервер сам проверяет полученные данные и смотрит, получал ли юзер с таким ID сессию с таким ID. Если да, то возвращает инфу о юзере в xml, если нет, то возвращает в этом же xml ошибку.
Офлайн
DaevaornА, ну да, сорри, не так Вас понял просто. ))) Кстати, всё уже заработало, огромное спасибо за помощь! В скором времени уже смогу показать для чего мне это было нужно. ))
Ну так значит всё-таки по куке? :-) В исходном сообщении вы сказали что это сервер проверяет авторизованность по логину и паролю, и было бы странно при каждом запросе их спрашивать у пользователя. Следовательно авторизационный сервер может проверять залогиненность и по куке. Что вы собственно в этом абзаце и подтвердили.
Офлайн