你如何在 django rest 框架中实现 CSRF 令牌?
Posted
技术标签:
【中文标题】你如何在 django rest 框架中实现 CSRF 令牌?【英文标题】:How do you implement CSRF tokens in django rest framework? 【发布时间】:2021-05-20 14:25:37 【问题描述】:我注意到,当使用 django 并且您发出发布请求时,例如使用表单,django 要求您添加 csrf 令牌,但是当我从使用 django rest 框架创建的 api 中获取数据时,我意识到当我没有发送 csrf 令牌时,应用程序没有任何错误。
在这个应用程序中,我正在使用带有 knox 的令牌身份验证,并且我看到了一些关于如何将 csrf 令牌与会话身份验证一起使用的帖子。
我的问题是令牌身份验证是否不需要 csrf 令牌,或者它们是否通过反应自动传递?提前致谢。
【问题讨论】:
【参考方案1】:@Diegoa87 - 你搞错了。
CSRF 令牌是一个唯一的、秘密的、不可预测的值,由服务器端应用程序生成并以包含在客户端发出的后续 HTTP 请求中的方式传输到客户端。当发出后面的请求时,服务器端应用程序验证请求是否包含预期的令牌,如果令牌丢失或无效,则拒绝请求。 GET 请求不需要它。它不是一种对用户进行身份验证或授权的形式。它是一种验证请求的形式。添加 CSRF 令牌以防止 CSRF 攻击。还有一个叫做s-s-rF
的东西基于令牌的身份验证 - 这与请求的类型无关。验证用户是否为合法用户。
授权 - 这是为了确保被请求的用户有足够的权限来访问受保护的资源。
我的问题是令牌身份验证是否不需要 csrf 令牌或者它们是否通过反应自动传递?提前致谢。
据我所知,令牌是在标头中传递的,这是针对每个请求(GET、POST、PUT、DELETE)的。 Csrf 令牌以 html 形式添加,主要用于 POST、PUT、DELETE。可以改变服务器中资源状态的东西。 希望这是有道理的。
我不是 React 专家,但没有什么是自动传递的。您必须在请求的标头中添加令牌。
Csrf 令牌与请求绑定。
令牌/JWT 令牌与发出请求的用户绑定。
【讨论】:
哦,好吧,那么 CSRF 是为了保护我的网站,它与身份验证无关。 @Diegoa87- 是的,Csrf 不是用户身份验证或授权的一种形式。它是一种验证请求是否有效的表单。以上是关于你如何在 django rest 框架中实现 CSRF 令牌?的主要内容,如果未能解决你的问题,请参考以下文章
Jersey 框架如何在 REST 中实现 JAX-RS API?
<script> 的 Django REST 框架密码安全性