问题描述
我必须在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令牌绑定。
谢谢。
注意:我还尝试在CSRF_TRUSTED_ORIGINS设置中添加IDP域
解决方法
您可能需要将SAML返回视图标记为@csrf_exempt
,因为IDP不知道如何传递Django特定的CSRF令牌。