DJANGO SAML2 CSRF

#django #saml-2.0

#джанго #saml-2.0 #django

Вопрос:

Я должен ввести аутентификацию SAML2 в моем проекте Django.

Мое базовое приложение использует токен CSRF, который предоставляется @ensure_csrf_cookie decorator на главной странице.

Для реализации SAML я добавил новую кнопку «войти» на главную страницу (ту, которая устанавливает se csrf token cookie). Кнопка отправить запрос SAML в IDP. Когда я возвращаюсь из IDP на целевую страницу (представление во вложенном приложении saml2, которое считывает ответ) Я получил запрещенную ошибку 403 о токене CSRF.

Я использую библиотеку OneLogin python (python3-saml). https://github.com/onelogin/python3-saml

Целевая страница — это та, которая заканчивается: ?acs

Что я хочу знать, так это то, что это проблема моей целевой страницы или ответ IDP должен быть каким-то образом привязан к токену csrf.

введите описание изображения здесь

Спасибо.

ПРИМЕЧАНИЕ: я также попытался добавить домен IDP в настройку CSRF_TRUSTED_ORIGINS

Ответ №1:

Вероятно, вам потребуется пометить представление возврата SAML, поскольку @csrf_exempt поскольку IDP не будет знать, как передать CSRF-токен, специфичный для Django.

Комментарии:

1. Да. Мне пришлось прибегнуть к этому обману, потому что нет способа получить ответ SAML с моим токеном csrf.

2. Это не обман, особенно учитывая, что механизм SAML в любом случае будет проверять полезную нагрузку SAML. У сайта, который мог бы выполнять межсайтовые запросы, нет возможности создать полезную нагрузку SAML, которая также прошла бы эту проверку.