2015-09-29 9 views
7

Sto cercando di determinare perché l'autenticazione per le risorse protette utilizzando l'intestazione Authorization: si comporta correttamente quando si utilizza un server di sviluppo locale ma non sull'implementazione di apache 2.2 w/mod_wsgi distribuito .Django JWT Comportamento dell'autenticazione diverso tra server locali e mod_wsgi con framework Django REST

Sto usando django 1.8 con django-rest-framework e la libreria django-rest-framework-jwt per l'autenticazione basata su JWT. Il server Apache è ver 2.2 con mod_wsgi. Tutto questo è in esecuzione su un'istanza di Ubuntu 12.04 (python 2.7).

caso Lavorare con runserver manage.py su 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":"[...]"} 

caso rotto 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."} 

Apache sito config

#### 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 #### 

Forse rilevanti configurazioni

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', 
} 

risposta

9

ho incontrato problema simile. Capisco che mi mancava sotto direttiva nel file di configurazione di Apache

WSGIPassAuthorization On 
+2

Questo era esattamente quello che era. – cerd

Problemi correlati