simple - django-rest-knox
El comportamiento de Django JWT Authentication es diferente entre los servidores locales y mod_wsgi con el marco Django REST (1)
Estoy intentando determinar por qué la autenticación de los recursos protegidos utilizando el encabezado Authorization:
comporta correctamente cuando se utiliza un servidor de desarrollo local, pero no en la implementación desplegada de apache 2.2 w / mod_wsgi.
Estoy usando django 1.8 con django-rest-framework
y django-rest-framework-jwt
lib para la autenticación basada en JWT. El servidor apache es el 2.2 con mod_wsgi. Todo esto se ejecuta en una instancia de ubuntu 12.04 (python 2.7).
Caso de trabajo con manage.py runserver en localhost:
# manage.py runserver is running
curl -s -X POST /
-d ''{"username":"[email protected]", "password":}'' /
http://localhost:8000/portfolio/login
# Response as expected:
##> {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp..."}
# Using above token as $TOKEN_STR with JWT prefix for Auth header:
curl -X GET -H "Content-Type: application/json" /
-H "Authorization: $TOKEN_STR" /
http://localhost:8000/portfolio
# Response as expected
##> {"data":"[...]"}
Caja rota con apache2.2 mod_wsgi:
curl -s -X POST /
-d ''{"username":"[email protected]", "password":}'' /
http://myremote.com/django/portfolio/login
# Response as expected:
##> {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp..."}
# Using above token as $TOKEN_STR with JWT prefix for Auth header:
curl -X GET -H "Content-Type: application/json" /
-H "Authorization: $TOKEN_STR" /
http://myremote.com/django/portfolio
# Response behaves as authentication not even there w/403 or 401:
##> {"detail": "Authentication credentials were not provided."}
Configuración del sitio Apache
#### DJANGO APP ####
LogLevel info
WSGIDaemonProcess dev processes=2 threads=15
WSGIProcessGroup dev
WSGIScriptAlias /django /webapps/django/config/wsgi.py
<Directory /webapps/django>
Order allow,deny
Allow from all
</Directory>
### DJANGO APP ####
Configuraciones posiblemente relevantes
config.py
## Django rest frameowkr config
REST_FRAMEWORK = {
''DEFAULT_PERMISSION_CLASSES'': (
''rest_framework.permissions.IsAuthenticated'',
),
''DEFAULT_AUTHENTICATION_CLASSES'': (
''rest_framework.authentication.SessionAuthentication'',
''rest_framework.authentication.BasicAuthentication'',
''rest_framework_jwt.authentication.JSONWebTokenAuthentication'',
)
}
JWT_AUTH = {
''JWT_ENCODE_HANDLER'':
''rest_framework_jwt.utils.jwt_encode_handler'',
''JWT_DECODE_HANDLER'':
''rest_framework_jwt.utils.jwt_decode_handler'',
''JWT_PAYLOAD_HANDLER'':
''rest_framework_jwt.utils.jwt_payload_handler'',
''JWT_PAYLOAD_GET_USER_ID_HANDLER'':
''rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler'',
''JWT_RESPONSE_PAYLOAD_HANDLER'':
''rest_framework_jwt.utils.jwt_response_payload_handler'',
''JWT_SECRET_KEY'': SECRET_KEY,
''JWT_ALGORITHM'': ''HS256'',
''JWT_AUTH_HEADER_PREFIX'': ''JWT'',
}
He encontrado un problema similar. Me doy cuenta de que estaba faltando debajo de la directiva en el archivo de configuración de Apache
WSGIPassAuthorization On