sessionauthentication knox framework disable django security api csrf

knox - Tener una API POST''able y el Middleware CSRF de Django



django rest knox (3)

Tengo una aplicación web de Django que tiene un componente front-end, accesible a través de la web y una API a la que accede un cliente de escritorio. Sin embargo, ahora con el nuevo componente de middleware de CSRF, las solicitudes de API del cliente de escritorio que tienen POST''ed obtienen un 403.

Entiendo por qué sucede esto, pero ¿cuál es la forma correcta de solucionarlo sin comprometer la seguridad? ¿Hay alguna forma en que pueda indicar en el encabezado HTTP que se trata de una solicitud de API y que Django no debería estar buscando CSRF o es una mala estrategia?

Editar--

El método que estoy usando en este momento es que el cliente de escritorio establece un encabezado, X-Requerido-Con: XMLHttpRequest. Esto es un poco hacky, pero no estoy seguro de cómo se manejaría mejor.


¿Qué le csrf_exempt simplemente dividir una vista (s) para su cliente de escritorio y decorarlos con csrf_exempt ?


Desde Django 1.1, el código CSRF permitirá automáticamente el paso de las solicitudes AJAX, ya que los navegadores parecen hacer comprobaciones de seguridad adecuadas. Aquí está el compromiso original y la documentation .


Si está utilizando una vista basada en clase, deberá csrf_exempt el método de envío en lugar del método de publicación como este:

@method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): return super(MyView, self).dispatch(request, *args, **kwargs)

Vea este ticket de error: https://code.djangoproject.com/ticket/15794