2017-11-11 193 views
1

我有多个django服务器(移动客户端的API后端)运行在负载平衡器后面。但是,当访问Django管理员有时我得到403禁止错误。它与csrf cookie有关吗?Django admin CSRF 403错误

我的负载均衡器设置,

会议粘性 - 无

算法 - ROUNDROBIN

+0

你能告诉我你是怎么做的吗?请 –

+0

你需要打开会话粘贴或关闭CSRF。 – serg

+0

你好,你最终解决这个问题吗?我有同样的问题 – psychok7

回答

0

我不能成像任何情况下,直到你在一个浏览器选项卡中完成所有的工作时,它的可能。当您请求表单(使用GET请求)时,您将生成csrf cookie(如果它尚不存在)并为此cookie生成csrfmiddlewaretoken,作为响应,您将使csrf标记和cookie值处于一致状态。在POST请求中,您的浏览器发送它们并在服务器端进行比较。所以,这种行为不应该依赖于后端。但你总是可以用记录器测试你的假设。从文档:

CSRF故障记录为对django.security.csrf记录器的警告。

改变在Django 1.11:

在旧版本中,CSRF故障记录到django.request记录。

+0

这是CSRF保护的重点,它依赖于后端。它将来自客户端cookie的令牌与存储在该特定后端的会话变量中的参考值进行比较。发送该请求到不同的后端,它应该失败。 – serg

+0

我同意,如果您使用'CSRF_USE_SESSIONS = True'的Django 1.11。在其他情况下,不管后端为您生成csrfmiddlewaretoken,因为它只取决于发送的cookie值。当然,我认为所有的后端都有相同的源代码。 –