simple obtain guardian from framework apache apache2 authorization mod-proxy django-rest-framework

apache - obtain - rest framework jwt django



Falta el encabezado de la autorizacion en django rest_framework, es culpa de apache? (3)

Depende del tipo de despliegue de Django / Apache que haya realizado. Debe indicarle al módulo Apache correcto que permita pasar el encabezado HTTP de "Autenticación":

  • Apache / mod_wsgi:

    WSGIPassAuthorization On

  • Apache / mod_fcgid:

    FcgidPassHeader Authorization

En otras palabras: muchos módulos Apache filtran el encabezado HTTP "Autenticación", por lo que Django no lo recibirá. Debes asegurarte de que tu aplicación Django la reciba a petición.

Ver: django_rest doc y Apache fcgid doc .

NOTA: Después de modificar la configuración de Apache, deberá reiniciar apache daemon o decirle que vuelva a cargar su archivo .cgi (es decir: touch my_site_fcgifile.fcgi ).

TokenAuthentication extender TokenAuthentication y tengo un modelo de trabajo cuando uso la sesión de solicitud para almacenar mis tokens, sin embargo, cuando intento pasar Authorization como un parámetro de encabezado como se describe aquí , noté que mis Responses regresan sin la variable META HTTP_AUTHORIZATION . También noté que si paso "Authorization2" como un parámetro de encabezado que es visible en la solicitud:

{ ''_content_type'': '''', ''accepted_media_type'': ''application/json'', ''_request'': <WSGIRequest path:/api/test_auth/, GET:<QueryDict: {}>, POST:<QueryDict: {}>, COOKIES:{ ''MOD_AUTH_CAS_S'': ''ba90237b5b6a15017f8ca1d5ef0b95c1'', ''csrftoken'': ''VswgfoOGHQmbWpCXksGUycj94XlwBwMh'', ''sessionid'': ''de1f3a8eee48730dd34f6b4d41caa210'' }, META:{ ''DOCUMENT_ROOT'': ''/etc/apache2/htdocs'', ''GATEWAY_INTERFACE'': ''CGI/1.1'', ''HTTPS'': ''1'', ''HTTP_ACCEPT'': ''*/*'', ''HTTP_ACCEPT_CHARSET'': ''ISO-8859-1,utf-8;q=0.7,*;q=0.3'', ''HTTP_ACCEPT_ENCODING'': ''gzip,deflate,sdch'', ''HTTP_ACCEPT_LANGUAGE'': ''en-US,en;q=0.8'', ''HTTP_AUTHORIZATION2'': ''Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4c'', ...

Mi primera suposición es que apache ha eliminado el encabezado de autorización, y he leído algunas preguntas de S / O que afirman que apache arrojará el valor si no coincide con la autorización básica y la autenticación, pero no tengo ni idea de cómo permitir que el encabezado Authorization ''pase'' a Django y a WSGIRequest. ¿Alguien sabe cómo solucionar este problema?

También uso mod_auth_cas y mod_proxy, si eso cambia algo ...


Perdón por responder mi propia pregunta minutos después de preguntarlo. ¡Pero resulta que fue apache2 después de todo! Después de rastrear las redes y mirar algunos resultados de búsqueda, encontré esto en un comentario:

RewriteEngine on RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

¡Agregar las líneas anteriores a mi archivo conf pareció resolver todos mis problemas! ¡Espero que esto ayude a los usuarios en el futuro!


Si está utilizando Apache y mod_wsgi, entonces encontré la solución fácil para esto en el sitio web oficial del framework Django REST

Configuración específica de mod_wsgi de Apache

Tenga en cuenta que si se implementa en Apache utilizando mod_wsgi, el encabezado de autorización no se pasa a una aplicación WSGI de forma predeterminada, ya que se supone que la autenticación será manejada por Apache, en lugar de a nivel de aplicación.

Si se está implementando en Apache, y utilizando cualquier autenticación que no esté basada en sesiones, necesitará configurar explícitamente mod_wsgi para pasar los encabezados requeridos a la aplicación. Esto puede hacerse especificando la directiva WSGIPassAuthorization en el contexto apropiado y configurándola en ''On''.

# this can go in either server config, virtual host, directory or .htaccess WSGIPassAuthorization On