2016-09-29 2 views
1

Я реализую поддержку SAML на своем сайте. Я использую OneLogin's Python SAML Toolkit в своем приложении Django для этого. Все работает нормально, подключая как приложение OneLogin test, так и приложение Azure, когда оно находится на моем локальном компьютере, либо http://127.0.0.1:8000 (полностью локальный), либо http://192.168.x.x:800 (локальная сеть). Как только я попробую это на моем промежуточном сервере, который заставляет все URL-адреса https, все не удается. IE11 не в POST никаких данных в ответ провайдера идентификации, который является фантастическим, и вообще я получаю ошибки из набора инструментальных средств, как так:SAML и принудительный SSL

The response was received at https://dev.mysite.com:80/saml/connect/ instead of https://dev.mysite.com/saml/connect/ 

Таким образом, хотя вещи должны быть настроены должным образом, IdP ветров пытается POST вернемся к моему промежуточному серверу на порту 80, что смущает все. Если я установил все, чтобы использовать порт 80 с самого начала, Chrome ухитряется, потому что он не доверяет https://...:80 как безопасный. Я не могу найти какие-либо документы или вопросы, связанные с этой проблемой; все, что я видел это примечание в the OneLogin Python setup instructions:

Important: Ensure that your URLs begin with http, not https. 

но нет никакого объяснения, почему. Я совершенно смущен.

ответ

0

python-saml поддерживает https или http.

Все, что вам нужно, это установить propertly значение запроса, проверить эту демонстрацию с помощью метода prepare_django_request (https://github.com/onelogin/python-saml/blob/master/demo-django/demo/views.py#L18)

+0

Я настройки этих значений должным образом; это не проблема. Похоже, что IdP всегда возвращает POSTing с помощью http, который мой dev-сервер принудительно обновляет до https, что закручивает вещи. В ближайшее время я постараюсь предоставить более подробную информацию. – grantpatterson

+0

Хорошо, я уступлю, что _кратное чтение_ этой демонстрации зафиксировало нашу проблему: '# Если сервер находится за прокси или балансировщики используют поля HTTP_X_FORWARDED В принципе нам нужно использовать' request.META ['HTTP_X_FORWARDED_PORT'] ', потому что мы находятся за ELB. ('get_port()' в Django 1.9 было бы полезно для этого.) Вот откуда появился порт 80, запутывая вещи. – grantpatterson

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