2014-11-30 2 views
3

У меня возникла большая проблема с моими сеансами в проекте Django.Как работать с интерфейсом, который не использует один и тот же домен в Django

Внутренний адрес размещен по адресу .my-domain.org, а интерфейсный сервер использует REST API для внешнего интерфейса в .front-end.com. В будущем могут появиться другие интерфейсы на совершенно разных доменах.

Как я могу справиться с такой ситуацией, когда я использую рамки сеанса, предоставленные Django? Похоже, что SESSION_COOKIE_DOMAIN разрешает только сеансовые файлы cookie на один субдомен. В результате я хочу, чтобы я мог зарегистрироваться в .my-domain.org (т. Е. SESSION_COOKIE_DOMAIN = None), тогда я не могу получить файл cookie сеанса с .front-end.com, когда он вызывает конечные точки API. С другой стороны, установка SESSION_COOKIE_DOMAIN на .front-end.com помешает мне подключиться к администратору сайта. На ситуацию также влияет SESSION_COOKIE_PATH, конечно же ...

Любая помощь более чем приветствуется. Я совершенно уверен, что я не первый, кому нужен REST API с аутентификацией сеанса, доступный из внешних доменов.

+1

У меня нет короткого ответа на этот вопрос, но проблема, которую вы пытаетесь решить, вероятно, находится в сфере «единого входа» (или «единого входа») ... это может помочь http: // stackoverflow.com/q/4662348/202168 https://code.google.com/p/django-sso/ – Anentropic

+1

Вы используете _wave для использования рамки сеанса? Вы столкнетесь с проблемами с CORS/JSONP, действительно ли вы хотите представить задачу CSRF? Я бы рекомендовал посмотреть в OAuth 2 или «TokenAuthentication», если это возможно. –

ответ

1

Django использует файлы cookie для аутентификации на основе сеанса, и они обычно не могут устанавливаться в нескольких доменах. Хотя вы можете обойти это немного с CORS and withCredentials, это может быть blocked by default в некоторых браузерах.

Как правило, вам лучше работать с другим методом аутентификации при работе с доменами. Даже если вы сможете заставить CORS работать с файлами cookie, вам также придется сразиться с CSRF across domains, в котором Django REST Framework указывает in their documentation. Я бы рекомендовал OAuth 2 из-за широкой поддержки клиентов и поддержки в Django REST Framework для него, но другие использовали TokenAuthentication without issues.

При использовании OAuth вам необходимо настроить свой внешний интерфейс как клиент и использовать для проверки подлинности web authentication flow, так как иначе вы должны leaving private keys out in the open, что не так хорошо заканчивается. Это будет работать так же, как «единый вход», но не требует, чтобы ваш передний конец подписывал запросы и занимал закрытые ключи. Вам также не нужно беспокоиться о CSRF, поскольку Django REST Framework требует только для SessionAuthentication.

+0

Я действительно рассматриваю переход на OAuth2, поскольку он кажется самым умным выбором из того, что я читал до сих пор. – Buddyshot

Смежные вопросы