2014-01-30 73 views
1

当我试图通过CSRF验证失败的授权

curl -X POST -d "grant_type=password&username=myusername&password=mypassword" http://localhost:8000/oauth2/authorize/ 

授权我得到403禁止:CSRF验证失败。请求中止。我不明白为什么,任何帮助将不胜感激。

顺便说一下,我使用Django OAuth工具包进行身份验证。

编辑:我知道CSRF保护以及如何在django视图和表单中使用它,我使用的是一个名为Django OAuth Toolkit的包,用于oauth 2授权,它不应该要求csrf令牌。关于我要实现的目标,有一点点信息here

回答

5

我很惭愧地说,我将请求发送到错误的URL,我应该把它交给http://localhost:8000/oauth2/token/

curl -X POST -d "grant_type=password&username=myusername&password=mypassword&client_id=myclientid" http://localhost:8000/oauth2/token/ 
+0

同样的事情发生在我身上。感谢您记录解决方案。 –

+0

谢谢!矿井比这更微妙。使用curl刷新令牌时,URL上的结尾斜杠是至关重要的 - 如果没有它,您将得到csrf验证错误。 – danj1974

0

您需要在POST数据中添加csrf标记。

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

+1

我知道CSRF保护,以及如何在Django视图和形式使用它,我使用名为Django OAuth Toolkit的软件包进行oauth 2授权,该授权不应要求提供csrf令牌。 – neelix

+0

可能它不能与localhost一起工作 –

0

这也许值得你读内置Cross Site Request Forgery protection上Django的文档。

任何发布到Django视图需要设置csrfmiddlewaretoken,否则您将获得403.您需要将其包含在内,或者从CSRF保护中选择exempt your view(如果可能,更喜欢前一种方法)。

+3

我知道CSRF保护以及如何在django视图和窗体中使用它,我使用了一个名为Django OAuth Toolkit的包,用于oauth 2授权,它不应该要求csrf令牌。 – neelix