Ich habe es geschafft, TokenAuthentication
zu erweitern, und ich habe ein funktionierendes Modell, wenn ich die Anforderungssitzung meine Token zu speichern, aber wenn ich Authorization
als Header-Parameter as described here übergeben, bemerkte ich, dass meine Antworten ohne die META-Variable HTTP_AUTHORIZATION zurückkommen . Ich habe auch bemerkt, dass, wenn ich „Authorization2“ als Header-Parameter übergeben, dass es in der Anfrage sichtbar ist:Autorisierungskopf fehlt in Django rest_framework, ist Apache schuld?
{
'_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',
...
Meine erste Vermutung ist, dass der Autorisierungsheader von Apache entfernt wird, und ich habe ein paar S gelesen/O Fragen, die besagen, dass Apache den Wert wegwerfen wird, wenn es nicht grundlegende Berechtigung und Authentifizierung entspricht, aber ich habe keine Ahnung, wie der Authorization-Header zu Django und der WSGIRequest übergeben werden kann. Weiß jemand, wie man dieses Problem löst?
Ich benutze auch mod_auth_cas und mod_proxy, ob das etwas ändert ..
Es gibt ein offenes Ticket, um dieses Apache-Verhalten zu dokumentieren: https://github.com/tomchristie/django-rest-framework/issues/488 Wenn jemand etwas Licht auf z. Nginx Verhalten in dieser Hinsicht wäre auch hilfreich. –
@Tom Christie, so machen Sie das mit nginx: proxy_no_cache $ http_pragma $ http_authorization; proxy_cache_bypass $ http_pragma $ http_authorisation; proxy_set_header HTTP_AUTHORIZATION $ http_authorization; –
@SalvatoreIovene Ich sah ein paar Notizen, als ich graben wollte. Vermutlich nur, wenn Nginx als Proxy verwendet wird. (?) –