如何使用 Postman 对 Django REST 框架进行身份验证

Posted

技术标签:

【中文标题】如何使用 Postman 对 Django REST 框架进行身份验证【英文标题】:How to Use Postman to Authenticate to Django REST Framework 【发布时间】:2017-08-02 22:18:01 【问题描述】:

我试图弄清楚。我有一个邮递员拦截器。但无论我尝试什么,我似乎都得到了 403 - CSRF 验证失败。请求中止。

在 chrome 中,我转到 DRF 的默认登录点。我输入用户名和密码,然后单击提交。它适用于 Chrome。使用拦截器,我可以看到 POST。现在,如果我在 Postman 中尝试 完全相同 POST,我会收到带有 CSRF 错误的 403。这怎么可能呢? Postman 所做的与 chrome 所做的完全一样。它怎么会产生不同的结果?

这是我从 Chrome 登录...

这是我和邮递员做的*完全相同的事情...

我错过了什么?我一直在阅读有关执行 GET 请求的信息,查看 set-cookie csrf 令牌和值,并将其放在我的 POST 请求的标头中。我已经尝试过了,我能想到的所有变体都无济于事。

【问题讨论】:

所以在我发布这篇文章几秒钟后,我当然明白了。问题是标题需要是“X-CSRFToken”而不仅仅是“csrftoken”。这似乎很令人困惑,并且显然是假设的知识......尽管如此,我仍然不明白为什么完全相同的 POST 在 chrome 中工作而不是邮递员。 chrome 不是必须设置该标题才能使其帖子正常工作吗?但它不在 chrome 发送的标题中。 【参考方案1】:

最初,使用 Postman 向 /api/auth/login/ URL(登录页面)发送 HTTP GET 请求。 此步骤对于从响应中获取 csrftoken 很重要。

HTTP GET 请求之前

发送 HTTP GET 请求后,您将收到一个 csrftoken cookie,如下所示,

在下一个 HTTP POST 请求中使用此值,方法是在请求标头中设置它。


或者,您可以使用 csrfmiddlewaretoken 键将 csrf 令牌与 form-data 一起发送,而不是标题。 p>

【讨论】:

以上是关于如何使用 Postman 对 Django REST 框架进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Django 在前端获取 CSRF 令牌以及如何在 Postman 中使用它

使用 Postman 的服务帐户对 Google Cloud Storage JSON API 进行身份验证

使用 Postman 进行 Django Rest Framework 令牌身份验证

对 API 的请求在 Postman 中有效,但在我尝试使用 laravel/guzzle 时无效

带有 JWT 身份验证实现的 Django GraphQL API 仍然允许来自 Postman 的未经身份验证的请求获取数据。我该如何解决?

使用 Postman 时 django-cors-header 无法按预期工作