DJANGO + SAML2 + CSRF

问题描述

我必须在Django项目中引入SAML2身份验证。

我的基本应用使用由@ensure_csrf_cookie装饰器在主页中提供的CSRF令牌。

为实现SAML,我在主页上添加一个新的“登录”按钮(用于设置secsrf令牌cookie的按钮)。该按钮将SAML请求发送到IDP。当我从IDP返回到登录页面(saml2子应用程序中的一个读取响应的视图)时,出现关于CSRF令牌的403禁止错误

我正在使用OneLogin python库(python3-saml)。 https://github.com/onelogin/python3-saml

目标网页的结尾是:?acs

我想知道的是我的目标网页问题或IDP响应是否必须以某种方式与csrf令牌绑定。

enter image description here

谢谢。

注意:我还尝试在CSRF_TRUSTED_ORIGINS设置中添加IDP域

解决方法

您可能需要将SAML返回视图标记为@csrf_exempt,因为IDP不知道如何传递Django特定的CSRF令牌。