Sono riuscito ad estendere TokenAuthentication
e ho un modello funzionante quando utilizzo la sessione di richiesta per memorizzare i miei token, tuttavia quando tento di passare Authorization
come parametro di intestazione as described here, ho notato che le mie risposte tornano senza la variabile META HTTP_AUTHORIZATION . Ho anche notato che se mi passa "Authorization2" come parametro di intestazione che è visibile nella richiesta:L'header di autorizzazione mancante in django rest_framework, è l'apache da incolpare?
{
'_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',
...
La mia prima risposta è che l'intestazione di autorizzazione viene rimosso da Apache, e ho letto un paio di S/O domande che affermano che apache cancellerà il valore se non corrisponde all'autorizzazione di base e autentica, ma non ho idea di come consentire all'intestazione dell'autorizzazione di passare attraverso Django e WSGIRequest. Qualcuno sa come risolvere questo problema?
Io uso anche mod_auth_cas e mod_proxy, se questo cambia nulla ..
C'è un ticket aperto per documentare questo comportamento di apache: https://github.com/tomchristie/django-rest-framework/issues/488 Se qualcuno può far luce su es. Anche il comportamento di Nginx a questo riguardo sarebbe utile. –
@ Tom Christie, questo è come lo si fa con nginx: proxy_no_cache $ http_pragma $ http_authorization; proxy_cache_bypass $ http_pragma $ http_authorization; proxy_set_header HTTP_AUTHORIZATION $ http_authorization; –
@SalvatoreIovene Ho visto alcune note in giro quando stavo scavando. Presumibilmente ciò si applica solo quando si usa Nginx come proxy. (?) –