desperadik
@desperadik
Истина где-то рядом.

Почему сбрасывается сессия? Или так и должно быть?

Добрый день!

Делаю единый центр регистрации и авторизации SSO на протоколе CAS 3.0.

Для этого использую:

django-cas-server
django-registration

Например,
Есть три сервиса:
1) service1.com
2) service2.com
3) service3.com

Сам CAS сервер:
cas.service.com

CAS сервер, точки входа:

1) /before-login/ - запрос email - поиск пользователя - если нашел - отправляем на /login/
2) /login/ - если пользователь авторизован на CAS и имеются параметры с какого сервиса пришел, авторедирект его в сервис.

Логика такая:
1) Не зарегистрированный пользователь заходит на любой из этих сервисов, нажимает на "Войти или Зарегистрироваться" и его редиректит по GET на CAS сервер(/before-login/ ).
2) Попадает на CAS сервер(вместе с запросом, приходят данные: с какого сервиса, с какой страницы)
3) CAS сервер просит e-mail, пользователь вводит, нажимает Submit.
4) CAS сервер ищет пользователя по e-mail, если находит - просит ввести пароль, а если не находит - то на регистрацию.
5) Пользователь вводит регистрационные данные, нажимает Submit, уходит письмо с ссылкой на активацию(в эту ссылку вшиваем код и в виде параметров, какой сервис и с какой страницы пришел пользователь)
6) Пользователь переходит по этой ссылке - его аккаунт активируется. После этого, мы его авторизуем в ручном режиме(мы же хотим минимум действий от пользователя) и записываем ему в сессию параметр authenticated:
self.request.session["authenticated"] = True
и после этого отправляем его на урл логина сервиса с которого он пришел(Что бы получить правильный тикет от сервиса к CAS серверу), с этого УРЛА его естественно, перенаправляет на CAS (/login/) также с параметрами, с какой страницы пришел и с какого сервиса.
И тут должна произойти магия:
Так как мы авторизовали пользователя до этого вручную, значит пользователь должен автоматом вернуться в сервис авторизованным. Но авторизация сбрасывается, а точнее сессия.

Но если не вставить self.request.session["authenticated"] = True, то CAS останавливается на /login/, показывает что пользователь авторизован, но редирект не происходит, потому что в сессии не стоит authenticated = True.

self.request.session["authenticated"] ее проверяет django-cas-server

Прошу прощения, за много букв и сумбурное изложение.

Что я пытался:

Про бывал обновлять hash сессии, после того как я вставлю в него authenticated.
  • Вопрос задан
  • 621 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы